将空格添加到 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]);

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