ごまなつ Blog

楽しく働ける世界を目指して

【C#】DataGridViewComboBoxを一度のクリックで開きたい

結論

F4を押す処理を追加する方法が出てくるが、F4はALTと同時押しするとアプリケーション終了になるなど、ショートカットキーに使われており何か起こる可能性があるのでお勧めしない。 CellEnterイベントで、DropedDownを使おう

private void DataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            if(dgv.Columns[e.ColumnIndex].Name == columnName 
            {
                dgv.BeginEdit(false);
                ((DataGridViewComboBoxEditingControl)dgv.EditingControl).DroppedDown = true;
            }
        }

経緯

現在作成しているフォームアプリでは、DataGridViewComboBoxColumnを追加しています。DataGridViewでコンボボックスのカラムを使うと、コンボボックスが開くまでに2回クリックしなければなりません。

  • 1回目のクリックでこのカラムがクリックされたか検知
  • 2回目のクリックでコンボボックスを開く

という処理になっているからです。これは直感に反するので、一回のクリックで開くようにする方法を調べました。すると、CellEnterイベントでSendKeys.Send("{F4}");する方法が見つかりました。これでもできたのですが、ALTを押しながらだとALT+F4となりアプリケーションが落ちるのでは?と考え実際にやってみると落ちました。F4はショートカットキーに使われるため、この方法は良くないと考え、DropedDownを使う方法を採用しました。

感想

処理は実現できたのですが、思わぬところで不具合が出ることがあるのでそこも想定したうえで採用する処理を考えていこうと思いました。