Windows Forms: вручную нарисовать выбранный элемент ComboBox

У меня есть ComboBox (ToolStripCombobox, если быть более точным), заполненный элементами типа KeyValuePair<Int32, FontFamily>, Мне удалось нарисовать Предметы вручную, используя событие DrawItem. Таким образом, каждый элемент окрашен с помощью FontFamily соответствующей KeyValuePair. Это прекрасно работает для DropDownList, но когда я выбираю Item из списка и список закрывается, текст в ComboBox говорит что-то вроде "[21, [FontFamily: Name=Arial]]", что, скорее всего, является результатом SelectedItem.ToString().

Есть идеи, как решить эту проблему?

Вот код моего пользовательского метода DrawItem:

private void fontComboBoxDrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            if ((e.State & DrawItemState.Focus) != 0)
            {
                e.DrawFocusRectangle();
            }
            Brush objBrush = null;

            var itemToDraw = this.fontComboBox.Items[e.Index];

                KeyValuePair<Int32, FontFamily> windowsFontItem = (KeyValuePair<Int32, FontFamily>)itemToDraw;
                objBrush = new SolidBrush(e.ForeColor);
                e.Graphics.DrawString(windowsFontItem.Value.Name, new Font(windowsFontItem.Value, e.Font.Size), objBrush, e.Bounds);
            if (objBrush != null)
            {
                objBrush.Dispose();
            }
            objBrush = null;
        }

Обновить:

Это работает, как и ожидалось, когда я установил DropDownStyle ComboBox в ComboBoxStyle.DropDownList

Но я бы предпочел использовать ComboBoxStyle.DropDown, так что вы можете редактировать текст для поиска шрифтов.

0 ответов

Другие вопросы по тегам