将空格添加到 Winforms 中的多列列表框
Adding whitespaces to a multicolumn Listbox in Winforms
我有一个包含两列的列表框,并以这种方式填充它:
list.Items.Add(string.Format("{0} {1}","header1","header2"));
for (int i = 0; i < column1.Count;i++)
{
list.Items.Add(string.Format("{0} {1}", column1[i], column2[i]));
}
我想做的是在其中放入空格而不是我自己做(不使 {0} 和 {1} 之间的差距变大)。因此根据列项的长度(第 1 列是数字,第 2 列是字符串)它们应该位于 "header1" 和 "header2" 字符串的中间并且也应该有一个间隙(假设大约 10 headers 之间的字符)。
我知道有类似 "PadRight" 的东西,但不知道如何在这里使用它。这可能吗?谢谢!
P.S.: 我不想使用 ListView
这应该是这样的:
"header1" "header2"
1 Name1
3 Name2
10 Name234
101 Name10
尝试这样的事情:
list.Items.Add(string.Format("{0,20} {1,20}","header1","header2"));
for (int i = 0; i < column1.Count;i++)
{
list.Items.Add(string.Format("{0,20} {1,20}", column1[i], column2[i]));
}
编辑(请记住,这绝不是最佳解决方案):
如果您希望列中的值更接近中间,只需向临时变量添加更多空格即可。
string header1 = "Header_1";
string header2 = "Header_2";
int clmnWidth = 50;
// Centered columns headers
this.listBox1.Items.Add(string.Format("|{0}|{1}|",
header1.PadLeft(clmnWidth / 2).PadRight(clmnWidth - header1.Length),
header2.PadLeft(clmnWidth / 2).PadRight(clmnWidth - header2.Length)));
string temp = " ";
for (int i = 0; i < clmn1.Length; i++)
{
this.listBox1.Items.Add(String.Format("|{0}|{1}|",
temp + clmn1[i].ToString().PadRight(clmnWidth - clmn1[i].ToString().Length - temp.Length), /*.PadLeft(clmnWidth / 2)*/
temp + clmn2[i].ToString().PadRight(clmnWidth - clmn2[i].ToString().Length - temp.Length))); /*.PadLeft(clmnWidth / 2)*/
}
不使用等宽字体的另一种方法是使用制表符:
listBox1.Items.Add(" " + column1[i] + "\t" + column2[i]);
但是,像 DataGridView
或 ListView
这样的不同控件(甚至两个 ListBox
彼此相邻?)会更灵活,更容易调整。
我有一个包含两列的列表框,并以这种方式填充它:
list.Items.Add(string.Format("{0} {1}","header1","header2"));
for (int i = 0; i < column1.Count;i++)
{
list.Items.Add(string.Format("{0} {1}", column1[i], column2[i]));
}
我想做的是在其中放入空格而不是我自己做(不使 {0} 和 {1} 之间的差距变大)。因此根据列项的长度(第 1 列是数字,第 2 列是字符串)它们应该位于 "header1" 和 "header2" 字符串的中间并且也应该有一个间隙(假设大约 10 headers 之间的字符)。 我知道有类似 "PadRight" 的东西,但不知道如何在这里使用它。这可能吗?谢谢!
P.S.: 我不想使用 ListView
这应该是这样的:
"header1" "header2"
1 Name1
3 Name2
10 Name234
101 Name10
尝试这样的事情:
list.Items.Add(string.Format("{0,20} {1,20}","header1","header2"));
for (int i = 0; i < column1.Count;i++)
{
list.Items.Add(string.Format("{0,20} {1,20}", column1[i], column2[i]));
}
编辑(请记住,这绝不是最佳解决方案): 如果您希望列中的值更接近中间,只需向临时变量添加更多空格即可。
string header1 = "Header_1";
string header2 = "Header_2";
int clmnWidth = 50;
// Centered columns headers
this.listBox1.Items.Add(string.Format("|{0}|{1}|",
header1.PadLeft(clmnWidth / 2).PadRight(clmnWidth - header1.Length),
header2.PadLeft(clmnWidth / 2).PadRight(clmnWidth - header2.Length)));
string temp = " ";
for (int i = 0; i < clmn1.Length; i++)
{
this.listBox1.Items.Add(String.Format("|{0}|{1}|",
temp + clmn1[i].ToString().PadRight(clmnWidth - clmn1[i].ToString().Length - temp.Length), /*.PadLeft(clmnWidth / 2)*/
temp + clmn2[i].ToString().PadRight(clmnWidth - clmn2[i].ToString().Length - temp.Length))); /*.PadLeft(clmnWidth / 2)*/
}
不使用等宽字体的另一种方法是使用制表符:
listBox1.Items.Add(" " + column1[i] + "\t" + column2[i]);
但是,像 DataGridView
或 ListView
这样的不同控件(甚至两个 ListBox
彼此相邻?)会更灵活,更容易调整。