DataGridのセル内でのキーイベントを捕捉する例えば、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); } (この記事は「.NETプログラミング研究 第27号」で紹介したものです。) 注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright 2002-2008 DOBON!. All rights reserved.
|