格式化多行TextBox中的字符串

时间:2017-01-17 10:42:39

标签: .net string vb.net string-formatting

我想以这种格式向多行TextBox添加3个字符串:

  str1:    3000
 srr22:   23044
str333:  222222

我需要将TextBox中的这些字符串对齐到右边。

我试过这段代码:

Dim s1 As String = " str1: "
Dim n1 As Integer = 3000

Dim s3 As String=vbCrLf & String.Format("{0,15}", s1) & String.Format(" {0:d6}", n1)
txtKopfring.Text = s3
s1 = "str22: "
n1 = 23044

s3 = s3 & vbCrLf & String.Format("{0,15}", s1) & String.Format("{0:d6}", n1)
txtKopfring.Text = s3

s1 = "str333: "
n1 = 222222

s3 = s3 & vbCrLf & String.Format("{0,15}", s1) & String.Format("{0:d6}", n1)
txtKopfring.Text = s3

然而输出并不像预期的那样,你能提供提示以使输出正确吗?

3 个答案:

答案 0 :(得分:3)

首先,将字体更改为fixed-width字体。我选择 Courier New

现在要开始工作,您需要知道数字的最大长度。在您的示例中,这是 222222 ,其长度为 6

为实现这一点,我所做的就是将数字添加到Dictionary

Dim numbers As New Dictionary(Of String, Integer)
numbers.Add("str1: ", 3000)
numbers.Add("str22: ", 23044)
numbers.Add("str333: ", 222222)

然后,我找到了.Values集合的最大长度,以确定哪个数字具有最大长度,使用maxLength填充数字:

Dim maxLength As Integer = numbers.Values.Max.ToString.Length

接下来的工作是遍历Dictionary并将值添加到StringBuilder

'Import System.Text
Dim sb As New StringBuilder

For Each number As KeyValuePair(Of String, Integer) In numbers
    sb.AppendLine(String.Format("{0,15}", number.Key) & String.Format("{0:d6}", number.Value.ToString.PadLeft(maxLength)))
Next
  

要使用StringBuilder,您必须导入System.Text

最后:

txtKopfring.Text = sb.ToString()

这给了我以下输出:

enter image description here

如果您不想遵循我的逻辑,要在代码中实现您的目标,您可以更改:

String.Format(" {0:d6}", n1)

要:

String.Format("{0:d6}", n1.ToString.PadLeft(6))
  

注意6是硬编码的,不建议使用,因为其他值可能会起作用,这可能会更长,并会抛出格式。

此外,我已直接从您的问题中复制了您的代码,并发现了一个小问题。

这个String.Format(" {0:d6}", n1)在第一个参数中有一个空格,它将在您的格式中被包含。删除像String.Format("{0:d6}", n1)这样的空格。

答案 1 :(得分:0)

你不能通过.NET中已经存在的函数来实现吗?

txtKopfring.TextAlign = HorizontalAlignment.Right

答案 2 :(得分:0)

如果您不必使用textBox,则可以使用datagridview。 在表单中插入datagridview并将其命名为dtgv。

然后,插入以下代码:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    ' Set columns properties
    initialisation_dtgv()

    With dtgv
        ' Set 3 rows.
        .RowCount = 3

        ' Set values for your cells
        .Rows(0).Cells(0).Value = "str1"
        .Rows(0).Cells(1).Value = 3000

        .Rows(1).Cells(0).Value = "srr22:"
        .Rows(1).Cells(1).Value = 23044

        .Rows(2).Cells(0).Value = "str333:"
        .Rows(2).Cells(1).Value = 222222
    End With
End Sub

Private Sub initialisation_dtgv()
    With dtgv
        Dim cols1 As New System.Windows.Forms.DataGridViewTextBoxColumn
        cols1.Name = "STR"
        cols1.HeaderText = "STR"
        cols1.ToolTipText = "STR"
        cols1.Width = 50
        cols1.Visible = True
        cols1.DisplayIndex = 1
        cols1.SortMode = DataGridViewColumnSortMode.NotSortable
        ' Set the alignment of your column
        cols1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        .Columns.Add(cols1)

        Dim coln1 As New System.Windows.Forms.DataGridViewTextBoxColumn
        coln1.Name = "NUMBER"
        coln1.HeaderText = "NUMBER"
        coln1.ToolTipText = "NUMBER"
        coln1.Width = 60
        coln1.Visible = True
        coln1.DisplayIndex = 2
        ' Set the alignment of your column
        coln1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        coln1.SortMode = DataGridViewColumnSortMode.NotSortable
        .Columns.Add(coln1)
    End With
End Sub