我有一个 ComboBox(更准确地说是 ToolStripCombobox),里面装满了KeyValuePair<Int32, FontFamily>
. 我设法通过使用 DrawItem 事件手动绘制了 Items。所以每一个Item都用对应KeyValuePair的FontFamily来绘制。这适用于 DropDownList,但是当我从列表中选择一个项目并且列表关闭时,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 设置为时,它按预期工作ComboBoxStyle.DropDownList
但我宁愿使用ComboBoxStyle.DropDown
,因此您可以编辑文本以搜索字体。