1

我有一个 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,因此您可以编辑文本以搜索字体。

4

0 回答 0