Перерисовка нарисованных владельцем элементов combobox winforms

Мне нужно отображать элементы в поле со списком с другим цветом фона. Я также хочу изменить этот цвет в зависимости от того, выбран ли элемент (или мышь находится поверх него), точно так же, как это работает, когда поле со списком не отображается владельцем.

Все работает нормально, за исключением того, что когда мышь отрывается от одного из элементов, для которого я изменил цвет, этот элемент сохраняет тот же цвет, что и когда мышь находилась сверху. В приведенном ниже примере элемент «другое» изначально правильно отрисовывается с помощью 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
    }
}

person Jimmy    schedule 25.08.2012    source источник


Ответы (1)


Вместо того, чтобы использовать

cb.SelectedIndex == e.Index

Мне нужно было использовать DrawItemState:

((state & DrawItemState.Selected) > 0) || ((state & DrawItemState.HotLight) > 0)
person Jimmy    schedule 26.08.2012