如何在 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.
没有简单的控件可以让您使用选项卡;所以你要么需要一个控件,比如有列的 ListView
,要么你需要选择一个固定大小的字体(比如 Consolas
),然后用 string.PadLeft
和 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]);
};
请注意 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 会更好。
我向列表框添加值,
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.
没有简单的控件可以让您使用选项卡;所以你要么需要一个控件,比如有列的 ListView
,要么你需要选择一个固定大小的字体(比如 Consolas
),然后用 string.PadLeft
和 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]);
};
请注意 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 会更好。