misc.log

日常茶飯事とお仕事と

DataGridViewのコンボボックスセル、クリック一発でドロップダウンを表示させる

下記の内容に関連して、コンボボックスタイプのDataGridViewセルの挙動を改善する例です。

www.backyrd.net

DataGridViewのセルをDataGridViewComboBoxDellに指定している場合、コンボボックス右端の逆三角をクリックしてもすぐにドロップダウンリストは表示されません。マウスクリックだと、先にセル選択という処理が行われ、セルにフォーカスが設定され、その後改めてマウスでセルをクリックしたり、F4を押すとドロップダウンリストが表示されます。 これを簡略化する例です。ロジック等は下記のサイトを参考にさせてもらっています。

www.itlab51.com

必要なロジックは下記の通り。まずはCellEnterイベント用の処理を記述します。内容は「選択されたセルがDataGridViewComboBoxCellであった場合に、セルを強制的に編集モードにして、それと同時に登場する編集モード用コントロールのDroppedDownプロパティをいじる」というものです。

private void dataGridView2_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView2[e.ColumnIndex, e.RowIndex].GetType().Equals(typeof(DataGridViewComboBoxCell)))
    {
        dataGridView2.BeginEdit(false);
        ((DataGridViewComboBoxEditingControl)dataGridView2.EditingControl).DroppedDown = true;
    }
}

次に、このCellEnter用メソッドがCellEndterイベントで発動するように、イベントハンドラーの設定をおこなってください。

dataGridView2.CellEnter += new DataGridViewCellEventHandler(dataGridView2_CellEnter);

これだけです。どうやらCellEnterイベントはいろんなタイミングでおきるようで、実際にはコンボボックスセルをクリックしても、他の場所でのイベントなども起きる事から、「セルがコンボボックスか」という判定処理は必須のようです。

参考まで。