将空格添加到 WinForms 中的多列列表框

本文关键字:列表 空格 添加 WinForms | 更新日期: 2024-11-05 16:11:24

我有一个列表框,里面有两列,并以这种方式填充它:

            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 个字符)。我知道有类似"PadRight"的东西,但不知道如何在这里使用它。这可能吗?谢谢!

PS:我不想使用列表视图

这应该看起来像:

 "header1"          "header2"
     1                Name1
     3                Name2
     10               Name234
     101              Name10        

将空格添加到 WinForms 中的多列列表框

尝试这样的事情:

    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]));
    }

编辑(请记住,这绝不是最佳解决方案):如果您希望列中的值更接近中间值,只需向 temp 变量添加更多空格即可。

        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]);

但是,不同的控件,如DataGridViewListView(甚至两个彼此相邻的ListBox?)会更灵活,更容易调整。