DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewのコンボボックスのドロップダウンリストが一回のクリックで表示されるようにする

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

こちらで紹介したように、DataGridViewComboBoxColumnを使ってコンボボックスを表示した時、このコンボボックスのリストをドロップダウンさせるには、まずセルを選択するためにクリックし、さらにセルを編集状態にするためにクリックし、最後にドロップダウンさせるためにクリックするというように、3回クリックする必要があります。ここでは、これが一回のクリックで済むようにする方法を紹介します。

これを実現する方法は、「DataGridView: Implement Single click navigation to a DataGridView Combo Box Cell」で紹介されています。この方法は、CellEnterイベントハンドラで、SendKeys.Sendを使ってF4キーを送信するというものです。

以下にこの方法を使った例を示します。ここでは、"ComboBox"という名前の列がDataGridViewComboBoxColumnである時に、この列のコンボボックスのリストを一度のクリックでドロップダウンさせるようにしています。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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イベントの代わりにこれらを使用した場合、現在フォーカスのあるコンボボックスのセルをクリックすると、ドロップダウンリストが出て、すぐに引っ込んでしまいます。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。