0

为我的工程工作想到了非常酷的实用程序,但是,我认为很简单的东西有问题。我的目标是轻松地为均匀字段应用不等间距...我研究了填充,因为这听起来像是解决方案,但我最终得到了与以下相同的输出。

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
4

2 回答 2

0

正如评论所说,你不能依赖这种方法(添加空格)而不考虑给定字体的大小。此外,在这些情况下,它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)

我依靠不同的列表(每个“列”一个)来清楚地展示这些想法。TextRenderer.MeasureText首先,您必须根据给定字体(via )的文本长度来确定每列的最长长度。之后,您必须重新确定尺寸SelectionTabs以考虑您想要的列数并从上述最大值设置长度。最后,通过指定“列之间的分隔”应该放置的位置来写入值(vbTab)。

注意:默认的 RichTextBox 配置似乎会自动考虑选项卡,而没有任何指示。只需编写最后一个循环(仅包括编写部分),默认的 RichTextBox(VS 2010)就会显示预期的行为(3“列”)。

于 2013-10-05T18:35:27.343 回答
0

赞!您的示例代码有效。谢谢!

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$/$  
于 2013-10-07T16:10:48.073 回答