注意:ここで紹介している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イベントを捕捉しています。なお、テーブルスタイルの説明は省かれています。分からないという方はこちらをご覧ください。
'フォームの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
//フォームの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号」で紹介したものです。)