字符串格式在标签文本中显示不正确

String format not displaying properly in label text

我正在尝试格式化字符串列表,以便将项目显示为两列,每列长度为 40。为此,我正在使用下一个函数:

Private Function GetNamesString(names As List(Of String)) As String
    Dim str As String = String.Empty
    For i = 0 To names.Count - 2 Step 2
        str += $"{names(i),-40}{names(i + 1),-40}"
        str += $"{vbCrLf}"
    Next
    Return str
End Function

我建立消息如下:

Dim message As String = $"Removing master species {gbl.EditSpecies.Name} implies that next {names.Count} species must be also removed:{vbCrLf}{vbCrLf}"
message += GetNamesString(names)
message += $"{vbCrLf}{vbCrLf}Do you want to remove above species besides {gbl.EditSpecies.Name}?"

获取下一个字符串:

Removing master species Fe+3 implies that next 106 species must be also removed:

Beidellite_SBld-1(4.576H2O)             Ca2Fe2O5(s)                             
CaFe2O4(s)                              C4FH13                                  
C3FH6                                   Ettringite-Fe                           
Monosulfate-Fe                          Smectite_MX80(5.189H2O)                 
...

最后,我显示消息形式:

frmShowMessage.Show(message, "Remove species", enumMessageIcon.Warning, enumMessageButton.YesNo)

直接在标签文字中显示messagelblMessageText.Text = message(标签文字使用的字体为Arial)

然而,我得到下一个结果:

这不是我想要的列格式显示。你知道为什么我会收到消息形式的未格式化字符串吗?

谢谢!

正如 jmcilhinney 在问题评论中指出的那样,我使用的是比例字体(例如,Arial 字体类型),它无法适合等间距的列。

解决方案是使用等宽字体类型(例如 Consolas):