Выравнивание текста в выпадающем списке - PullRequest
0 голосов
/ 16 июня 2010

У меня есть выпадающий список Winforms. В раскрывающемся списке отображается строка в форме ...

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

Мне нужно, чтобы струны выстроились в линию, чтобы вес всегда начинался с одного и того же места. Поэтому, когда есть их список, все выстраивается в линию.

Мое текущее решение состояло в том, чтобы использовать моноширинный шрифт и создать строку отображения, которая дополняет каждую часть пробелами, чтобы все выровнялось. Однако шрифт выглядит иначе, чем остальная часть приложения, и бета-тестеры не одобрили. Есть ли способ заставить текст выстраиваться в линию без использования моноширинного шрифта? Таким образом, я могу использовать тот же шрифт, который используется для остальной части приложения.

Спасибо

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Это похоже на очень веб-вопрос, я полагаю, вы говорите о ComboBox. Да, есть кое-что, что вы можете сделать с помощью свойства DrawMode. Если вы установите для него значение OwnerDrawFixed, тогда вы сможете реализовать обработчик событий DrawItem и рисовать выпадающие элементы так, как вам нужно. В теме библиотеки MSDN есть очень хороший пример для этого события.

Вам потребуется проделать дополнительную работу, чтобы она правильно отображалась в текстовой части поля со списком. Не должно быть проблемой, вам не нужны колонки для этого. Возможно, вы можете разделить элементы отличительным символом, который вы также можете использовать в событии DrawItem, чтобы найти текст столбца обратно.

1 голос
/ 16 июня 2010

Посмотрите на событие DrawItem для ComboBox.Там вы можете сделать любой вид форматирования.Убедитесь, что для 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 });
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...