データグリッドのキーイベントが発生しない
データグリッドでキーイベントが発生しないという現象が起こります。
データグリッドProcessCmdKeyメソッドをオーバーライドして入力キーを拾えるようにします。
Public Class ExDataGrid Inherits System.Windows.Forms.DataGrid Public Event KeyEvent(ByVal keyData As System.Windows.Forms.Keys, _ ByRef Cancel As Boolean) Protected Overrides Function ProcessCmdKey(ByRef msg As _ System.Windows.Forms.Message, _ ByVal keyData As System.Windows.Forms.Keys) As Boolean Dim blnCancel As Boolean Select Case keyData Case Keys.Return, Keys.Tab RaiseEvent KeyEvent(keyData, blnCancel) If blnCancel Then Return True End If Case ...その他拾いたいキーがあれば書く End Select Return MyBase.ProcessCmdKey(msg, keyData) End Function End Class
上記例ではエンターキーとタブキーを拾っています。
あとはデータグリッドを使用しているフォームでKeyEventをハンドルすればOKです。
Private Sub DataGrid1_KeyEvent(ByVal keyData As _ System.Windows.Forms.Keys, _ ByRef Cancel As Boolean) Handles DataGrid1.KeyEvent 'グリットが選択されているかどうか If DataGrid1.CurrentRowIndex <> -1 Then Select Case keyData Case Keys.Return ...処理 Cancel = True Case Keys.Tab Me.SelectNextControl(DataGrid1, True, True, True, True) Cancel = True End Select End If End Sub
とこんな感じです。