Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

KeyDownイベントでEnterキーが効かない

タグの編集...

投稿者 のる   (社会人)   投稿日時 2022/4/6 13:55:53
VB.NETのキーイベントについて質問します。
KeyDownイベントにて、Fキーや数字キー、Enterキーを押したときにそれぞれの処理が走るようなプログラムを作成中なのですが、Enterキーを押したとき、KeyDownイベント自体が実行されません。何か助言お願いします。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

  Me.KeyPreview = True

End Sub

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown

  Select Case e.KeyCode
          Case Keys.F1 : 処理1
          Case Keys.F2 : 処理2
          Case &H30 : 処理3
          Case Keys.Enter : 処理4  
  End Select

End Sub







投稿者 魔界の仮面弁士   (社会人)   投稿日時 2022/4/6 16:41:44
> Enterキーを押したとき、KeyDownイベント自体が実行されません。

たとえば、Button コントロール等がアクティブな状態になっていたりはしませんか?


Label を 2 つだけ貼って、それ以外のコントロールは一切何もない状態で
下記のコードを試してみましたが、当方では "F1", "F2", "&H30", "Enter" の
いずれも表示されました。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        KeyPreview = True
        Label1.UseMnemonic = False
    End Sub

    Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        Select Case e.KeyCode
            Case Keys.F1 : Label1.Text = "F1"
            Case Keys.F2 : Label1.Text = "F2"
            Case Keys.D0, &H30 : Label1.Text = "&H30"
            Case Keys.Enter : Label1.Text = "Enter"
            Case Else : Label1.Text = ""
        End Select
        Label2.Text = e.KeyCode.ToString()
    End Sub
End Class



コントロールがあっても Tab や Enter を拾いたい場合には、
ProcessCmdKey メソッドや ProcessDialogKey メソッドなどの
Process 系メソッドをオーバーライドすることも検討してみてください。

Protected Overrides Function ProcessDialogKey(keyData As Keys) As Boolean
    Label3.Text = keyData.ToString()
    Return MyBase.ProcessDialogKey(keyData)
End Function


投稿者 のる   (社会人)   投稿日時 2022/4/6 17:20:07
魔界の仮面弁士様

回答ありがとうございます。アドバイスにより解決することができました。

フォームを開いたときに、MsgBox(ActiveControl.Name)でアクティブになっているコントロールを見つけ出すことができました。そしてそのコントロールのプロパティ「TabStop」がTrue になっていたので False へ変更するとEnterキーのKeyDownが効くようになりました。