下拉列表中的文本对齐方式

时间:2010-06-16 18:15:20

标签: c# winforms

我有一个Winforms下拉列表。下拉列表显示一个以...形式的字符串

<Description 30chars> Weight:<weight 6chars> Thickness:<thickness 6chars>

我需要排队,所以重量总是从同一个地方开始。因此,当有一个列表时,一切都排好了。

我目前的解决方案是使用等宽字体并创建一个显示字符串,用空格填充每个部分以使所有内容排成一行。但是,字体看起来与应用程序的其他部分不同,并且beta测试人员不同意。有没有办法让文本排队而不使用单声道间隔字体?这样我就可以使用与应用程序其余部分相同的字体。

谢谢

2 个答案:

答案 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事件中使用它来找回列文本。