VB.Net字符串的等间距输出
我的工程工作中想到了非常酷的实用程序,但遗憾的是,我认为简单的东西会有问题。 我的目标是在均匀场中轻松应用不等间距。。。我已经研究了填充,因为这听起来像是解决方案,但我最终得到了与下面相同的输出VB.Net字符串的等间距输出,.net,vb.net,dynamic-data,space,.net,Vb.net,Dynamic Data,Space,我的工程工作中想到了非常酷的实用程序,但遗憾的是,我认为简单的东西会有问题。 我的目标是在均匀场中轻松应用不等间距。。。我已经研究了填充,因为这听起来像是解决方案,但我最终得到了与下面相同的输出 RichTextBox2.Text = "HOSTNAME IP LOCAL REMOTE PLATFORM " & vbNewLine Dim largest = 0 For Each host In hos
RichTextBox2.Text = "HOSTNAME IP LOCAL REMOTE PLATFORM "
& vbNewLine
Dim largest = 0
For Each host In hostnames
If host.ToString.Length > largest Then
largest = host.ToString.Length
End If
Next
For count As Integer = 0 To hostnames.Count - 1
Dim space = largest - hostnames(count).ToString.Length
RichTextBox2.AppendText(hostnames(count).ToString)
For x = 0 To space -1
RichTextBox2.AppendText(" ")
Next
Next
这是我得到的一个例子
SW_1123_TEST 1123.45.6.78
SW_2 123.4
SW_3+4_T 23.123.41.21
S_1 123.4.5.67
正如通过评论所说,如果不考虑给定字体的大小,就不能依赖这种方法(添加空格)。此外,
RichTextBox
有一个SelectionTabs
属性,在这些情况下非常有用。示例代码:
Dim inputs1 As New List(Of String)
Dim inputs2 As New List(Of String)
Dim inputs3 As New List(Of String)
inputs1.Add("1100")
inputs1.Add("120")
inputs1.Add("130000")
inputs2.Add("210")
inputs2.Add("22000")
inputs2.Add("2300")
inputs3.Add("31000")
inputs3.Add("3200")
inputs3.Add("3300")
Dim largest(3) As Integer
Dim curInputs As List(Of String) = inputs1
Dim count As Integer = -1
Do
count = count + 1
If (count = 1) Then curInputs = inputs2
If (count = 2) Then curInputs = inputs3
For Each item In curInputs
Dim curLength As Integer = TextRenderer.MeasureText(item, RichTextBox2.Font).Width
If curLength > largest(count) Then
largest(count) = curLength
End If
Next
Loop While (count < 2)
RichTextBox2.SelectionTabs = New Integer() {largest(0), largest(1), largest(2)}
count = -1
Do
count = count + 1
RichTextBox2.Text = RichTextBox2.Text & inputs1(count) & vbTab & inputs2(count) & vbTab & inputs3(count) & Environment.NewLine
Loop While (count < 2)
Dim inputs1作为新列表(字符串)
Dim inputs2作为新列表(字符串)
Dim inputs3作为新列表(字符串)
输入1.添加(“1100”)
输入1.添加(“120”)
输入1.添加(“130000”)
输入2.添加(“210”)
输入2.添加(“22000”)
输入2.添加(“2300”)
输入3.添加(“31000”)
输入3.添加(“3200”)
输入3.添加(“3300”)
将最大值(3)设置为整数
输入为列表(字符串)=输入1
整数形式的Dim计数=-1
做
计数=计数+1
如果(计数=1),则curInputs=inputs2
如果(计数=2),则curInputs=inputs3
对于curInputs中的每个项目
Dim curLength As Integer=TextRenderer.MeasureText(项目,RichTextBox2.Font).Width
如果卷曲长度>最大(计数),则
最大(计数)=卷曲长度
如果结束
下一个
循环时间(计数<2)
RichTextBox2.SelectionTabs=新整数(){最大(0)、最大(1)、最大(2)}
计数=-1
做
计数=计数+1
RichTextBox2.Text=RichTextBox2.Text&inputs1(计数)&vbTab&inputs2(计数)&vbTab&inputs3(计数)&Environment.NewLine
循环时间(计数<2)
我依靠不同的列表(每个“列”一个)来清楚地显示想法。首先,您必须根据给定字体的文本长度来确定每列的最长长度(通过TextRenderer.MeasureText
)。之后,您必须重新标注SelectionTabs
,以说明所需的列数,并根据上述最大值设置长度。最后,通过指定“列间分隔”的位置写入值(vbTab
)
注意:默认的RichTextBox配置似乎会自动考虑选项卡,而没有任何指示。只需编写最后一个循环(仅包括编写部分),默认的RichTextBox(VS 2010)就会显示预期的行为(3个“列”)。!您的示例代码有效。谢谢
SWITCH NAME IP ADDRESS LOCAL INTERFACE REMOTE INTERFACE
SW1@@@@@@@@@@@@@@@@@@ 12.34.927.42 GigabitEthernet$/$$ GigabitEthernet$?$
SW2@@@@@@@@@@ 12.3.123.42 GigabitEthernet$/$ GigabitEthernet$/$
SW3@@@@@@@@@@@@@@ 12.89.3.29 GigabitEthernet$/$$ GigabitEthernet$/$
SW4@@@@@@@ 12.89.3.29 GigabitEthernet$$/$ GigabitEthernet$/$
您需要一个固定宽度的字体来与此代码进行任何形式的对齐。在可变宽度字体中,字母W比字母I大。因此,基于字符计数的代码无法对齐字符串。您可以使用网格或listview之类的工具将每个字段发布到自己的列中。