如何在 ListBox 中格式化对齐方式

How to format alignment in ListBox

我向列表框添加值,

for(int i = 0; i < 2; ++i)
{
     lbBeamValue.Items.Add("Beam " + i.ToString() + " : " + value1[i] + " Angle " + i.ToString() + " : " + value2[i]);
}

显示如下:

Beam 0: 0.12 Angle 0: 0.65
Beam 1: 10.113213 Angle 1: 0.23

有没有办法确保 Angle 在每一行中对齐?喜欢:

Beam 0: 0.12      Angle 0: 0.65
Beam 1: 10.113213 Angle 1: 0.23

为什么不使用 ListView

Represents a Windows list view control, which displays a collection of items that can be displayed using one of four different views.

在那里你可以指定View and Columns

没有简单的控件可以让您使用选项卡;所以你要么需要一个控件,比如有列的 ListView,要么你需要选择一个固定大小的字体(比如 Consolas),然后用 string.PadLeftstring.PadRight:

lbBeamValue.Font = new Font("Consolas", 8f);

for (int i = 0; i < 2; ++i)
{
    listBox2.Items.Add("Beam " + (i).ToString("#0").PadLeft(2) + " : " + 
          value1[i].ToString().PadRight(11) + " Angle " + i.ToString() + " : " + 
          value2[i]);
        };

请注意 String.Format 还允许您构建带填充的复杂字符串。

列表框仍允许使用制表符。你可以这样实现:

  public Form1 ()
  {
     InitializeComponent ();
     // ....

     int [] MyTabs = {20,70,130};
     SetListTabs (lbMessages, MyTabs);
  }

  private void btnAddTabbed_Click (object sender, EventArgs e)
  {
     lbMessages.Items.Add ("1\t2\t3\t4");
     lbMessages.Items.Add ("40\t50\t60\t70");
     lbMessages.Items.Add ("100\t200\t300\t400");
  }

  private void SetListTabs (ListBox lb, IEnumerable<int> newTabs)
  {
     lb.UseCustomTabOffsets = true;

     ListBox.IntegerCollection lbTabs = lb.CustomTabOffsets;
     lbTabs.Clear ();

     foreach (int tab in newTabs)
     {
        lbTabs.Add (tab);
     }
  }

  private void btnAddTabbed_Click (object sender, EventArgs e)
  {
     lbMessages.Items.Add ("1\t2\t3\t4");
     lbMessages.Items.Add ("40\t50\t60\t70");
     lbMessages.Items.Add ("100\t200\t300\t400");
  }

但是我不得不问为什么当存在更好的选项(例如具有适当 header 支持的 ListView)时您要这样做。我想对于一个快速破解,或者 minimal-change 改造现有的应用程序,那么它是可以防御的,但是 ListView 会更好。