注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
こちらで紹介したように、DataGridViewComboBoxColumnを使ってコンボボックスを表示した時、このコンボボックスのリストをドロップダウンさせるには、まずセルを選択するためにクリックし、さらにセルを編集状態にするためにクリックし、最後にドロップダウンさせるためにクリックするというように、3回クリックする必要があります。ここでは、これが一回のクリックで済むようにする方法を紹介します。
これを実現する方法は、「DataGridView: Implement Single click navigation to a DataGridView Combo Box Cell」で紹介されています。この方法は、CellEnterイベントハンドラで、SendKeys.Sendを使ってF4キーを送信するというものです。
以下にこの方法を使った例を示します。ここでは、"ComboBox"という名前の列がDataGridViewComboBoxColumnである時に、この列のコンボボックスのリストを一度のクリックでドロップダウンさせるようにしています。
'CellEnterイベントハンドラ Private Sub DataGridView1_CellEnter(ByVal sender As Object, _ ByVal e As DataGridViewCellEventArgs) _ Handles DataGridView1.CellEnter Dim dgv As DataGridView = CType(sender, DataGridView) If dgv.Columns(e.ColumnIndex).Name = "ComboBox" AndAlso _ TypeOf dgv.Columns(e.ColumnIndex) Is DataGridViewComboBoxColumn Then SendKeys.Send("{F4}") End If End Sub
//CellEnterイベントハンドラ private void DataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = (DataGridView)sender; if (dgv.Columns[e.ColumnIndex].Name == "ComboBox" && dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn) { SendKeys.Send("{F4}"); } }
この方法ではCellEnterイベントを使用しているため、マウスでクリックしなくてもセルにフォーカスが移れば、リストがドロップダウンされます。マウスのクリックだけに反応するようにCellClickやCellMouseClick、CellMouseDown、CellMouseUpイベントなども使えそうですが、CellEnterイベントの代わりにこれらを使用した場合、現在フォーカスのあるコンボボックスのセルをクリックすると、ドロップダウンリストが出て、すぐに引っ込んでしまいます。