2015-10-28 21 views
0

我對編程相當陌生,我只是在C#.NET中編寫了一個簡單的應用程序來檢索有關係統驅動器空間的信息。該程序運行良好,但我努力格式化輸出。使用填充格式化文本不在C#中排列

見輸出:

Output Example

我試圖使用填充獲得文本排序中列格式的富文本框內排隊,但輸出不排隊,因爲如果有多個驅動器,驅動器名稱是不同的長度,拋出填充。即使驅動器字母以M爲單位返回,另一個爲I:字母大小的差異足以在填充時放棄對齊。

我想知道是否有辦法強制每個字符串值到一個特定的長度,所以填充均勻地應用或者如果可能有更好的方式來格式化我的輸出。預先感謝您的時間,並讓我知道,如果有任何進一步的信息會有所幫助!

+5

您的問題是[字距變化](https://en.wikipedia.org/wiki/Kerning)。將您的文本更改爲[等寬字體](https://en.wikipedia.org/wiki/Typeface#Monospaced_typefaces)字體(其中所有字符的寬度均相同)或使用具有實際列的控件,而不是嘗試匹配填充。例如,Consolas是Visual Studio中的默認字體,並且是等寬字體。 –

+0

嘗試使用Courier New字體。 – Lorek

+0

看起來它最有可能是你使用的字體,看看我比M大多了。 – Scriven

回答

1

注:一個評論問一個重要的問題,關於這個問題是否是指System.Windows.Forms.RichTextBox (WinForms)System.Windows.Controls.RichTextBox (WPF)控制。這個答案適用只有RichTextBox的WinForms版本,所以如果你使用WPF,這不適用。

最重要的事情,這是在評論中提到的是,你需要使用Monospaced font

由於您聲明您使用的是RichTextBox,因此您需要知道如何將其設置爲使用您選擇的任何等寬字體。

爲此,您可以使用RichTextBox.SelectionFont屬性。

對於更一般的說明,請參閱本MSDN文章:Setting Font Attributes for the Windows Forms RichTextBox Control

一旦你設置RichTextBox.SelectionFont屬性,只有文字添加到控制事後將使用指定的字體。要將字體應用於現有的文本(即,您填充RichTextBox,然後將字體更改爲適當的等寬字體),請查看this answer,其中明確指出要執行的操作。

一旦完成,仍然需要在每個字符串的末尾添加適當數量的空白,以便下一段數據出現在適當的位置。你可能會使用String.PadRight,但有關填充字符串的更多的一般信息,看看這個MSDN文章:Padding Strings in the .NET Framework

+0

這是一個簡單的修復。謝謝你的解釋! –

0

這裏的字符串格式化例如:

string varOne = "Line One"; 
double varTwo = 15/100; 

string output= String.Format("{0,-10} {1,5:P1}", varOne, varTwo); 

//expected output is 
//Line One 15 % 

凡在大括號格式化屬性: {index [,alignment] [:formatString]}

+0

我實際上是在String.Format上尋找這個解釋,所以非常感謝! –

相關問題