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

DataGridのセル内でのキーイベントを捕捉する

注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。

例えば、DataGridコントロール(System.Windows.Forms)のセル内でキーをたたいた時のKeyDownイベントは、DataGridのKeyDownイベントでは認識してくれません。この場合、DataGridコントロールのKeyDownイベントではなく、セルのTextBoxのKeyDownイベントを捕捉するようにします。セルのTextBoxオブジェクトは列スタイルDataGridTextBoxColumnのTextBoxプロパティから取得できます。

次の例では、DataGridコントロール"DataGrid1"にテーブルスタイル"DataTable1"が設定されている時に、その1列目のセルでのKeyDownイベントを捕捉しています。なお、テーブルスタイルの説明は省かれています。分からないという方はこちらをご覧ください。

VB.NET
コードを隠すコードを選択
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
    'DataGrid1にはテーブルスタイル"DataTable1"が
    '設定されているものとする
    'テーブルスタイルの取得
    Dim ts As DataGridTableStyle
    ts = DataGrid1.TableStyles("DataTable1")

    'DataGridTextBoxColumnの取得
    Dim cs As DataGridTextBoxColumn = _
        CType(ts.GridColumnStyles(0), DataGridTextBoxColumn)

    'TextBoxの取得
    Dim tb As TextBox = cs.TextBox
    'KeyDownイベントハンドラを追加
    AddHandler tb.KeyDown, AddressOf tb_KeyDown
End Sub


'KeyDownイベントハンドラ
Private Sub tb_KeyDown(ByVal sender As Object, _
        ByVal e As KeyEventArgs)
    '押されたキーを表示
    Console.WriteLine("キー({0})が押されました。", e.KeyCode)
End Sub
C#
コードを隠すコードを選択
//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
    //DataGrid1にはテーブルスタイル"DataTable1"が
    //設定されているものとする
    
    //テーブルスタイルの取得
    DataGridTableStyle ts;
    ts = DataGrid1.TableStyles["DataTable1"];

    //DataGridTextBoxColumnの取得
    DataGridTextBoxColumn cs =
        (DataGridTextBoxColumn) ts.GridColumnStyles[0];
    
    //TextBoxの取得
    TextBox tb = cs.TextBox;
    //KeyDownイベントハンドラを追加
    tb.KeyDown += new KeyEventHandler(tb_KeyDown);
}

//KeyDownイベントハンドラ
private void tb_KeyDown(object sender, KeyEventArgs e)
{
    //押されたキーを表示
    Console.WriteLine("キー({0})が押されました。", e.KeyCode);
}

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

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