0

背景色が異なるコンボボックスにアイテムを表示する必要があります。また、コンボボックスが所有者によって描画されていない場合と同じように、アイテムが選択されているか(またはマウスがその上にあるか)に応じて、その色を変更したいと思います。

色を変更したアイテムの1つからマウスが外れると、そのアイテムはマウスが上にあるときと同じ色のままになることを除いて、すべて正常に機能しています。以下の例では、アイテム'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
    }
}
4

1 に答える 1

0

使用するのではなく

cb.SelectedIndex == e.Index

DrawItemStateを使用する必要がありました:

((state & DrawItemState.Selected) > 0) || ((state & DrawItemState.HotLight) > 0)
于 2012-08-26T14:54:42.680 に答える