Запрет изменения размера в выпадающем списке при изменении шрифта - PullRequest
0 голосов
/ 17 августа 2011

У меня есть поле со списком, в котором есть список семейств шрифтов. Как вы можете догадаться, я делаю набор инструментов для редактирования шрифтов в элементе управления с расширенным текстовым полем. Проблема в том, что когда я меняю шрифт, он изменяет размер моего списка.

прокрутка различных шрифтов приводит к тому, что поле со списком становится «нервным», а некоторые шрифты имеют огромную высоту, что вызывает некоторые веселые проблемы.

Приложение А:

Combobox1

Приложение B:

Combobox2

Да ... я покажу код, который у меня есть до сих пор ... кстати, этот комбинированный список просто привязан к коллекции семейств шрифтов.

    void box_SelectedIndexChanged(object sender, EventArgs e)
    {
        String text = ((Font)box.SelectedItem).Name;
        Font font = (Font)box.SelectedItem;


        BeginInvoke(new Action(() => box.Text = text));
        BeginInvoke(new Action(() => box.Font = font));
    }

У кого-то есть идеи, если я не могу найти решение, я могу просто остановить изменение шрифта и просто отобразить имя шрифтом по умолчанию.

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

Использование ToolStripComboBox - вот проблема, я думаю.Классы .NET 2.0 ToolItem имеют множество остаточных функций, которые так и не были рассмотрены.WPF высосал ресурсы.Инструментальная полоска явно не очень хорошо справляется с изменением размера.Он также не заставляет остальную часть формы перемещаться вниз, когда она становится больше, что является дизайном.

Канонический комбинированный список шрифтов использует владельца рисования для отображения шрифтов в раскрывающемся списке в их обычном стиле.Без изменения шрифта самой коробки.Вы действительно не хотите, чтобы размер панели инструментов изменялся, это просто не лучший пользовательский интерфейс.

0 голосов
/ 17 августа 2011

К сожалению, я попробовал все эти подходы без особого успеха. Однако я не осознавал этого до сегодняшнего дня, когда я посмотрел, как это реализует Microsoft Office. Они фактически используют один и тот же шрифт в поле со списком для выбранного элемента, независимо от того, какой шрифт выбран. Поэтому, насколько я хочу сделать его более индивидуальным, я просто собираюсь использовать единый шрифт для любого шрифта, отображаемого в выбранном индексе.

0 голосов
/ 17 августа 2011

Единственный способ, которым я могу придумать, - это создать собственный элемент управления со списком и получить его.Это даст вам доступ к переменной ownerdraw, которая дает нам немного больше гибкости без необходимости возиться со свойством ItemHeight.Привязка к одному из событий, которые диктуют, что значение элемента управления изменилось.

Затем вы можете использовать функцию, подобную следующей, для вычисления нового размера макета:

 using (Font font = new Font(this.Font.FontFamily, (float)this.PreviewFontSize))
  {
    Size textSize;

    textSize = TextRenderer.MeasureText("yY", font);
    _itemHeight = textSize.Height + 2;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...