我想以这种格式向多行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
然而输出并不像预期的那样,你能提供提示以使输出正确吗?
答案 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()
这给了我以下输出:
如果您不想遵循我的逻辑,要在代码中实现您的目标,您可以更改:
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