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
, так что вы можете редактировать текст для поиска шрифтов.