如何在树视图中对齐像列的文本?

时间:2016-05-04 14:29:14

标签: c# string winforms treeview

我有一个TreeView,我想很好地安排我的数据。

我格式化我的字符串:

string name = ItemName;
string current = ("Current: " + info.Current.ToString() + " " + identifier);
string maximum = ("Maximum: " + info.Max.ToString() + " " + identifier);
string minimum = ("Minimum: " + info.Min.ToString() + " " + identifier);

string output = string.Format("{0,-20}{1,-30}{2,-30}{3,-30}{4,-30}", name, current, maximum, minimum, average);
dataNode.Text = output;

当我将output写入控制台时,它会按照我想要的方式打印它,就像这样(值已关闭,但这无关紧要):

Load                Current: 9,23 %               Maximum: 33,33 %              Minimum: 6,06 %               Average: 0 %
Temperature         Current: 40 °C                Maximum: 49 °C                Minimum: 38 °C                Average: 0 °C
Clock               Current: 1200 Mhz             Maximum: 2800,09 Mhz          Minimum: 1200 Mhz             Average: 0 Mhz
etc..

但是当我将完全相同的字符串打印到我的TreeView时,它会显示如下: enter image description here

我按照this页面上的示例进行操作,但这对我不起作用。

我想这与我在TreeView中使用的不同节点有关,但我不知道如何正确对齐我的数据。

4 个答案:

答案 0 :(得分:2)

似乎需要为TreeView设置等宽字体。

这是一个类似的问题,带有等宽字体(FontFamily.GenericMonospace)的例子:

C# .NET multiline TextBox with same-width characters

答案 1 :(得分:0)

这是.PadRight().PadLeft()的完美情况。

string output = 
        string.Format("{0}{1}{2}{3}{4}", 
                       name.PadRight(20), 
                       current.PadRight(30), 
                       maximum.PadRight(30), 
                       minimum.PadRight(30), 
                       average.PadRight(30));

此代码将确保每个参数占用的空间每次都相同。

答案 2 :(得分:0)

您可以使用其他控件来创建如下列:

在网络上可以找到许多样本控件:

TreeViewAdv for .Net

TreeView with Columns

ContainerListView and TreeListView

答案 3 :(得分:0)

尝试将treeView的字体更改为使用

non-proportional font like "Courier" , "Consolas"