DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridView編集中のKeyDownイベント(Enterキー)捕捉について

環境/言語:[VB2008 NET3 Vista]
分類:[.NET]

DataGridViewでセルが編集中の時にキーイベントを捕捉する
http://dobon.net/vb/dotnet/datagridview/textboxevent.html

を参考に
編集中のセルでEnterキー入力を捕捉しようとしてみましたが、
捕捉できません。

Private Sub dgvLeft_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles dgvLeft.EditingControlShowing
'表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
Dim dgv As DataGridView = CType(sender, DataGridView)

'編集のために表示されているコントロールを取得
Dim tb As DataGridViewTextBoxEditingControl = _
CType(e.Control, DataGridViewTextBoxEditingControl)

'イベントハンドラを削除
RemoveHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown

'該当する列か調べる
If dgv.CurrentCell.OwningColumn.Name = "Column2" Then
'KeyDownイベントハンドラを追加
AddHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown
End If
End If
End Sub


Private Sub dataGridViewTextBox_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
Debug.WriteLine("keydown=" & e.KeyCode.ToString)
End Sub


KeyDownイベントを捕捉するにはどのようにしたらよろしいでしょうか?
PreviewKeyDownイベントで試してみてはいかがでしょうか?

参考になれば幸いです。
 http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=21426&rev=&no=0&KLOG=4
 http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=21499&rev=&no=0&KLOG=4
■No22211に返信(H.K.R.さんの記事)
> PreviewKeyDownイベントで試してみてはいかがでしょうか?
>
> 参考になれば幸いです。
>  http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=21426&rev=&no=0&KLOG=4
>  http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=21499&rev=&no=0&KLOG=4

H.K.Rさん、ありがとうございました。
PreviewKeyDownイベントは知りませんでした。
これで解決できました。

以下、解決コードです。

Private Sub dgvLeft_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles dgvLeft.EditingControlShowing
'表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
Dim dgv As DataGridView = CType(sender, DataGridView)

'編集のために表示されているコントロールを取得
Dim tb As DataGridViewTextBoxEditingControl = _
CType(e.Control, DataGridViewTextBoxEditingControl)

'イベントハンドラを削除
RemoveHandler tb.PreviewKeyDown, AddressOf dataGridViewTextBox_PreviewKeyDown

'該当する列か調べる
If dgv.CurrentCell.OwningColumn.Name = "Column2" Then
AddHandler tb.PreviewKeyDown, AddressOf dataGridViewTextBox_PreviewKeyDown
End If
End If
End Sub


If e.KeyCode = Keys.Enter Then
Debug.WriteLine("Enter")
End If
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板