如何在VB.NET中检测同时按键,如"Ctrl + T"?

J2T*_*ner 11 vb.net keydown

我试图在VB.NET中检测到同时按下"Control"和"t"键.我到目前为止的代码如下:

Private Sub frmTimingP2P_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyValue = Keys.ControlKey And e.KeyValue = Keys.T Then
        MessageBox.Show("Ctrl + T")
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

我可以通过删除and语句和第二个keyvalue语句来检测一个键或另一个键,但是当我尝试这个时,我真的没有得到任何东西.还有另一种方法吗?

谢谢

Kon*_*lph 10

首先,And在你的代码中应该是AndAlso因为它是一个逻辑运算符.And在VB中是一个位操作符.接下来,您可以使用该Modifiers属性来测试修饰键:

If (e.KeyCode And Not Keys.Modifiers) = Keys.T AndAlso e.Modifiers = Keys.Ctrl Then
    MessageBox.Show("Ctrl + T")
End If
Run Code Online (Sandbox Code Playgroud)

e.KeyCode And Not Keys.Modifiers掩盖了修饰键中的条件的第一部分是必要的.

If e.Modifiers = Keys.Ctrl也可以写成If e.Control.

或者,我们可以通过直接询问组合Ctrl+ 是否T被按下来整理这两个查询:

If e.KeyCode = (Keys.T Or Keys.Ctrl) Then …
Run Code Online (Sandbox Code Playgroud)

在两个片段中,我们都使用了位掩码.

  • 我相信VB中的`And`既是位运算符又是逻辑运算符,具体取决于上下文.`AndAlso`只是一个短路的逻辑运算符. (2认同)