我需要在具有不同背景颜色的组合框中显示项目。如果项目被选中(或鼠标位于其上方),我还想更改颜色取决于颜色,就像组合框不是所有者绘制时一样。
一切正常,除了当鼠标从我改变了颜色的项目之一脱落时,该项目保持与鼠标在顶部时相同的颜色。在下面的示例中,项目“other”最初使用myUnselectedBrush正确绘制;鼠标移过顶部,用mySelectedBrush正确绘制;当鼠标脱落时,仍然使用mySelectedBrush错误地绘制它;它应该是用myUnselectedBrush绘制的。一切都适用于项目'某事',其颜色不会改变。
我做错了什么?
private void comboBoxDraw(object sender, DrawItemEventArgs e)
{
ComboBox cb = (ComboBox)sender;
Graphics g = e.Graphics;
e.DrawBackground();
if (e.Index > -1)
{
object item = cb.Items[e.Index];
switch (somethingOrOther)
{
case something:
break;
case other:
e.Graphics.FillRectangle(
(cb.SelectedIndex == e.Index)
? mySelectedBrush
: myUnselectedBrush,
e.Bounds);
break;
}
}
}
e.DrawFocusRectangle();
if (e.Index > -1)
{
// draw the string
}
}
答案 0 :(得分:0)
而不是使用
cb.SelectedIndex == e.Index
我需要使用DrawItemState:
((state & DrawItemState.Selected) > 0) || ((state & DrawItemState.HotLight) > 0)