2017-01-17 8 views
3

Я хотел бы добавить 3 строки в многострочных TextBox в этом формате:Форматирование строки в mutiline TextBox

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

Нужно ли выровнять только n1? – nbadaud

+0

Вывод, который мне нужен, записывается с самого начала, мне нужно, чтобы str1, str22, str333 были выровнены вправо, а также номера, которые должны быть выровнены вправо –

+0

Вы должны использовать текстовое поле? – nbadaud

ответ

3

Первое, изменить шрифт на fixed-width шрифта. Я выбрал Courier New.

Теперь для этого вам нужно знать, какая максимальная длина ваших номеров. В вашем примере это , длина которого .

Для достижения этой цели, что я сделал добавить цифры к 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) 

To:

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 
+0

не работает как результат Мне нужно –

0

Если вам не нужно использовать текстовое поле, вы можете использовать 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 
+0

спасибо за ответ, но представление datagrid нужно больше места на форме, и на самом деле у меня нет необходимого места, потому что я должен показать больше, чем 20 текстовых полей на форме, я бы пошел скорее за gruoup –

+0

@waleedalmukawi, Будет ли datagridview с большим количеством строк в порядке? И, кстати, вы можете изменить его появление, если вам нужно больше места;) – nbadaud