2017-01-17 58 views
3

格式化字符串我想3個字符串以這種格式添加到一個多TextBox在mutiline文本框

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

我需要的輸出寫在begenning中,我需要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) 

要:

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