3

所有,我已经深入了解,但似乎无法找到我正在寻找的东西。我想改变 ComboBoc 控件的选择颜色(理想情况下不必对控件进行子类化)。我虽然做以下事情会起作用,但这个事件甚至没有触发

private void comboBoxDb_DrawItem(object sender, DrawItemEventArgs e) 
{
    ComboBox combo = sender as ComboBox;
    e.Graphics.FillRectangle(new SolidBrush(combo.BackColor), e.Bounds);
    string strSelectionColor = @"#99D4FC";
    Color selectionColor = 
        System.Drawing.ColorTranslator.FromHtml(strSelectionColor);
    e.Graphics.DrawString(combo.Items[e.Index].ToString(), 
                          e.Font, 
                          new SolidBrush(selectionColor), 
                          new Point(e.Bounds.X, e.Bounds.Y));
}

但这个事件甚至没有触发。我在这里做错了什么?

谢谢你的时间。

编辑。尽管未触发是由于未正确设置 @Teppic 指出的 ComboBox 的 DrawMode 属性,但这仍然没有达到我的要求。我想设置选择颜色,我上面所做的(我在这里屏蔽了名字)

不是必需的

而我想更改控件的蓝色突出显示,如下所示。

在此处输入图像描述

4

2 回答 2

14

将 ComboBox 控件的 DrawMode 属性设置为 OwnerDrawFixed(如果每个项目的高度相同)或 OwnerDrawVariable(如果每个项目的高度可能不同)。

然后将您的 DrawItem 事件修改为以下内容(显然替换您自己的颜色):

private void comboBoxDb_DrawItem(object sender, DrawItemEventArgs e) 
{
    var combo = sender as ComboBox;

    if((e.State & DrawItemState.Selected) == DrawItemState.Selected)
    {
        e.Graphics.FillRectangle(new SolidBrush(Color.BlueViolet), e.Bounds);
    }
    else
    {
        e.Graphics.FillRectangle(new SolidBrush(SystemColors.Window), e.Bounds);
    }

    e.Graphics.DrawString(combo.Items[e.Index].ToString(),
                                  e.Font,
                                  new SolidBrush(Color.Black),
                                  new Point(e.Bounds.X, e.Bounds.Y));
}
于 2012-07-25T13:01:22.863 回答
0

要使 ComboBox 触发 DrawItem 事件,您必须将其DrawMode设置为OwnerDrawFixedOwnerDrawVariable。您可以在 MSDN 上详细了解它:http: //msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawmode 然后只需检查DrawItemEventArgs.State以查找是否选择了项目或其他内容。

于 2012-07-25T13:06:39.433 回答