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

时间:2015-03-05 04:21:10

标签: c# listbox

我将值添加到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

3 个答案:

答案 0 :(得分:2)

为什么不使用ListView

  

表示Windows列表视图控件,它显示一个集合   可以使用四种不同视图之一显示的项目。

您可以指定ViewColumns

答案 1 :(得分:0)

没有简单的控件可以让你使用标签;所以你需要一个控件,比如ListView有列,或者你需要选择一个固定大小的字体(比如Consolas)并用string.PadLeft和{填充每个项目给定长度{1}}:

string.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]); }; 还允许您使用填充构建复杂的字符串。

enter image description here

答案 2 :(得分:0)

列表框仍然允许使用标签。你可以这样做:

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

但是,当有更好的选项(如具有正确标头支持的ListView)存在时,我不得不问为什么要这样做。我想快速入侵,或对现有应用程序进行微小更改改造,那么它有点防御,但ListView会更好。