misc.log

日常茶飯事とお仕事と

DataGridViewのComboBoxCellで背景色をいい感じに変える

C#にて、DataGridViewのセルをコンボボックスに設定した際に、背景色を変更するとドロップダウンリスト(クリックなどで出てくる選択肢一覧)の背景もどぎつい色に変わってしまうという問題がおきます。これを回避するのに良い方法は無いのかと思ったのですが、以下の方法でいけました。

  • 編集モードになった際に登場するコンボボックスコントロールのDropDownイベントで色を変える。

DataGridViewには、編集モードに切り替わった際に、セルにうわかぶせで登場する編集用のコントロールが出現した事を検知するイベント「EditingControlShowing」があります。このイベントで、出現した編集用のコンボボックスを捕まえ、そこに「DropDown」イベントで実行するメソッドを紐付けるというものです。

まずは下記のソースをDataGridViewが用意されているフォームに記述。

private void dataGridView2_EditingControlShowing(object sender,    DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox combo = e.Control as ComboBox;
    if (combo != null)
    {
        // Remove an existing event-handler, if present, to avoid 
        // adding multiple handlers when the editing control is reused.
        combo.DropDown -= new EventHandler(ComboBox_DropDown);

        // Add the event handler. 
        combo.DropDown += new EventHandler(ComboBox_DropDown);
    }
}

private void ComboBox_DropDown(object sender, EventArgs e)
{
    ((ComboBox)sender).BackColor = Color.White;
}

次に、Loadイベントなどで下記のイベントハンドラー追加処理を記述します。

dataGridView2.EditingControlShowing +=new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);

これでOKです。ただ、ここで変更しているのは編集時に登場するコンボボックスのみなので、編集が完了するとDataGridView自体の背景色に戻ってしまうことは注意してください。

上記コードは下記のマイクロソフトサイトを参考にさせてもらっています。

docs.microsoft.com

グレープシティ SPREAD for Windows Forms 12.0J 1開発ライセンス

グレープシティ SPREAD for Windows Forms 12.0J 1開発ライセンス