Vb.net visual basic 2010/2012中未读取的按键输入

Vb.net visual basic 2010/2012中未读取的按键输入,vb.net,Vb.net,我的应用程序基于Visual Basic 2010/2012(两种语言的所有代码都相同)。当从键盘上按下'F'或'G'时,我试图做某些事情。我尝试过所有的方法,比如使用Keypress、keydown和keyup事件,但都不起作用 下面是我的应用程序的示例代码。这只显示了用户在消息框中按下的键,但也不起作用,即没有发生任何事情,甚至没有错误消息 Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me

我的应用程序基于Visual Basic 2010/2012(两种语言的所有代码都相同)。当从键盘上按下
'F'或'G'
时,我试图做某些事情。我尝试过所有的方法,比如使用
Keypress、keydown和keyup事件,但都不起作用

下面是我的应用程序的示例代码。这只显示了用户在消息框中按下的键,但也不起作用,即没有发生任何事情,甚至没有错误消息

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

    If (e.KeyCode = Keys.Control AndAlso (e.KeyCode = Keys.F)) Then
        MessageBox.Show("pressed F")
    ElseIf (e.KeyCode = Keys.Control AndAlso (e.KeyCode = Keys.B)) Then
    MessageBox.Show("pressed B")
    End If
End Sub`

正如@Tony Hopkinson所指出的,除了将表单的KeyPreview()设置为True外,下面是如何正确检查Ctrl-F或Ctrl-B:

Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.Control AndAlso e.KeyCode = Keys.F Then
        MessageBox.Show("Ctrl-F")
    ElseIf e.Control AndAlso e.KeyCode = Keys.B Then
        MessageBox.Show("Ctrl-B")
    End If
End Sub
按键

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
dim kc as string = e.KeyChar

if kc = "F" OR kc = "G" then msgbox "Horeeee"
End Sub

我对优化
KeyDown
处理程序的看法是,使用DRY原则(=不要重复自己):


是否已设置窗体的keypreview属性?KeyDown是正确的选择。正如@Tony提到的,只需启用KeyPreview。我想你的意思是
KeyPreview
,而不是
KeyDown
。谢谢大家的帮助。
Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  If Not e.Control Then Exit Sub
  Select Case e.KeyCode
    Case Keys.F : MessageBox.Show("Ctrl-F")
    Case Keys.B : MessageBox.Show("Ctrl-B")
  End Select
End Sub