2010-12-14 371 views
9

我想捕获两个按键在我的VB.net应用程序中,对于这个示例CTRL + B,下面的代码不起作用,但它对单个键有效。我已经尝试将keypreview设置为true,但这不起作用。vb.net组合键

Private Sub main_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles mybase.KeyDown 
      If e.KeyCode = Keys.ControlKey And e.KeyCode = Keys.B Then 
       MsgBox("CTRL + B Pressed !") 
      End If 
     End Sub 
    End Class 

由于

回答

16

Control键是修饰键。此代码测试Ctrl + B

e.KeyCode = Keys.B AndAlso e.Modifiers = Keys.Control 

关键代码是B,但修饰符是Ctrl。

您的代码段,更新:

Private Sub main_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles mybase.KeyDown 
    If (e.KeyCode = Keys.B AndAlso e.Modifiers = Keys.Control) Then 
     MsgBox("CTRL + B Pressed !") 
    End If 
End Sub 
+1

完美,认为这将是简单的事情!谢谢 :) – Elliott 2010-12-14 18:43:20

1

如果你看一下documentation for KeyEventArgs,你会注意到,类公开的ALT属性,CTRL和修改程序,让你以确定是否这些键被按下中除了你感兴趣的主要符号键。

Private Sub main_KeyDown(
     ByVal sender As Object, 
     ByVal e As System.Windows.Forms.KeyEventArgs) 
    Handles mybase.KeyDown 

    If e.Control And e.KeyCode = Keys.B Then 
     MsgBox("CTRL + B Pressed !") 
    End If 
End Sub 
2

你需要修改后也加入到CONTROLKEY使其正常工作。

Private Sub main_KeyDown(ByVal sender As Object, ByVal e As 
    System.Windows.Forms.KeyEventArgs) Handles mybase.KeyDown 
    If (e.KeyCode = Keys.B AndAlso e.Modifiers.ControlKey = Keys.Control) Then 
     MsgBox("CTRL + B Pressed !") 
    End If 
End Sub