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プロパティを設定しなかったことが原因で非起動が発生しましたが、これでも必要な処理が実行されていません。選択色を設定したいのですが、上記で行ったことです(ここでは名前をブロックしています)

NotWhatIsRequired

ここに示すように、コントロールの青いハイライトを変更したいのですが。

ここに画像の説明を入力してください

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 イベントを発生させるには、そのDrawModeOwnerDrawFixedまたはOwnerDrawVariableに設定する必要があります。詳細については、MSDN で読むことでき ます。

于 2012-07-25T13:06:39.433 に答える