【问题标题】:Text alignment in a dropdown list下拉列表中的文本对齐
【发布时间】:2010-06-17 03:45:13
【问题描述】:

我有一个 Winforms 下拉菜单。下拉菜单显示一个字符串,其形式为...

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

我需要把琴弦排好,这样重量总是从同一个地方开始。所以当有一个他们的列表时,一切都很好。

我当前的解决方案是使用等宽字体并创建一个显示字符串,用空格填充每个部分以使所有内容对齐。然而,字体看起来与应用程序的其余部分不同,并且 beta 测试人员没有批准。有没有办法在不使用单行距字体的情况下让文本对齐?这样我就可以使用与应用程序其余部分相同的字体。

谢谢

【问题讨论】:

标签: c# winforms


【解决方案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 });
        }

【讨论】:

  • 需要 e.DrawBackground() 和 e.DrawFocusRectangle() 但除此之外是一个很好的例子。谢谢。
  • 你的答案超过了汉斯,只是因为你是第一个。两个答案都是正确的。
【解决方案2】:

这看起来像是一个非常网状的问题,我假设您在谈论 ComboBox。是的,你可以用它的 DrawMode 属性做一些事情。当您将其设置为 OwnerDrawFixed 时,您可以实现 DrawItem 事件处理程序并按照您想要的方式绘制下拉项目。该事件的 MSDN 库主题中有一个非常好的示例。

您需要做一些额外的工作才能使其在组合框的文本框部分正确显示。不应该是一个问题,你不需要列。也许您可以用一个独特的字符分隔项目,您也可以在 DrawItem 事件中使用它来查找列文本。

【讨论】:

猜你喜欢
  • 2010-10-20
  • 2015-05-12
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
相关资源
最近更新 更多