|
■No62630 (NF64 さん) に返信 > KeyUpイベントではなく、KeyDownイベントを使用する。 > またはダイアログ表示中である事を示すフラグを持たせる。
ご回答ありがとうございました。いただいたご意見と 他所(OFFICE TANAKA様だったと思いますが、詳しいURLは忘れてしまいました)での 質問&および回答から、下記のようなコードを書いて 何とか思うような動作を得られました。 長くなりますが、ご容赦ください。
■DataGridView側
''' <summary> ''' DataGridViewを継承したクラス ''' </summary> ''' <remarks></remarks> Public Class DataGridViewEX Inherits System.Windows.Forms.DataGridView
Private m_Editing As Boolean = False
''' <summary> ''' セルの編集開始イベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub CellBeginEditEx(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles MyBase.CellBeginEdit
''フラグを「編集中」にする m_Editing = True End Sub
''' <summary> ''' セルの編集終了イベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub CellEndEditEx(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles MyBase.CellEndEdit
''フラグを「編集中じゃないよ」にする m_Editing = False End Sub
''' <summary> ''' セルの編集状態通知処理 ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Function IsCellEditing() As Boolean
''セルが編集中かどうかを返す Return Me.m_Editing End Function End Class
■Form側 ・上記DataGridViewEXとボタンを1つずつ配置 ・Form.AcceptButtonプロパティを設定
Public Class Form1
''' <summary> ''' 画面 起動イベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ''DataGridViewに明細行を追加 Me.dgv.RowCount = 3 End Sub
''' <summary> ''' 一覧 キーダウン ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub dgv_KeyDown(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv.KeyDown
''DataGridViewが編集中の場合はデフォルトの動作をさせる。 If dgv.IsCellEditing() Then Return End If
''Enterキーが押された? If e.KeyCode = Keys.Enter Then
''イベントを「処理済」状態にする e.Handled = True
''フォームの「既定のボタン」のクリックイベントを呼ぶ Me.AcceptButton.PerformClick() End If End Sub
''' <summary> ''' ボタン クリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub btn01_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn01.Click
MsgBox("Hello World !")
End Sub End Class
|