我有一个Winforms下拉列表。下拉列表显示一个以...形式的字符串
<Description 30chars> Weight:<weight 6chars> Thickness:<thickness 6chars>
我需要排队,所以重量总是从同一个地方开始。因此,当有一个列表时,一切都排好了。
我目前的解决方案是使用等宽字体并创建一个显示字符串,用空格填充每个部分以使所有内容排成一行。但是,字体看起来与应用程序的其他部分不同,并且beta测试人员不同意。有没有办法让文本排队而不使用单声道间隔字体?这样我就可以使用与应用程序其余部分相同的字体。
谢谢
答案 0 :(得分:1)
看一下ComboBox的DrawItem事件。你可以在那里进行任何格式化。确保将DrawMode设置为OwnerDrawXXXX。
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
ComboBox cb = (ComboBox)sender;
int index = e.Index;
Graphics g = e.Graphics;
DataItem item = (DataItem)cb.Items[index];
g.DrawString(item.Name, new Font("Arial", 8), new SolidBrush(Color.Blue), 0, e.Bounds.Y);
g.DrawString(item.Age.ToString(), new Font("Arial", 8), new SolidBrush(Color.Blue), 100, e.Bounds.Y);
}
public class DataItem
{
public string Name;
public int Age;
public override string ToString()
{
return string.Format("{0} {1}", Name, Age);
}
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add(new DataItem { Name = "Apple", Age = 10 });
comboBox1.Items.Add(new DataItem { Name = "Berry", Age = 20 });
comboBox1.Items.Add(new DataItem { Name = "Cherry", Age = 30 });
}
答案 1 :(得分:1)
这看起来像一个非常webby的问题,我假设你在谈论ComboBox。是的,您可以使用其DrawMode属性执行某些操作。当您将其设置为OwnerDrawFixed时,您可以实现DrawItem事件处理程序并按照您希望的方式绘制下拉项。这个事件的MSDN Library主题有一个非常好的例子。
您还需要做额外的工作,以便在组合框的文本框部分正确显示它。不应该是一个问题,你不需要列。也许你可以用一个独特的角色来分隔这些项目,你也可以在你的DrawItem事件中使用它来找回列文本。