你如何检测同时按键如VB.NET“CTRL + T”?(How do you detect simu

2019-07-04 21:10发布

我试图检测被同时按下VB.NET中的“控制”和“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

我可以检测一个键或其他通过移除和语句和第二键值声明,但我真的没有得到任何东西,当我尝试这一点。 是否有其他方法?

谢谢

Answer 1:

首先, 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

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 …

在这两个片段,我们使用的位掩码 。



Answer 2:

私人小组frmMain_Zaporka_KeyDown(发送者为对象,例如作为KeyEventArgs)把手MyBase.KeyDown

Select Case e.KeyData
    Case (Keys.Control + Keys.Shift + Keys.F12)
        MsgBox("Control + Shift + F12")
    Case (Keys.Escape)
        Me.Close()
End Select

' or

If e.KeyCode = Keys.F12 AndAlso e.Modifiers = (Keys.Control Or Keys.Shift) Then
    MsgBox("Control + Shift + F12")
ElseIf e.KeyCode = Keys.Escape Then
    Me.Close()
End If

' or

Select Case e.KeyCode
    Case (Keys.F12 And e.Control And e.Shift)
        MsgBox("Control + Shift + F12")
    Case (Keys.Escape)
        Me.Close()
End Select

结束小组



Answer 3:

我有同样的问题,但我得到这个工作,我不得不形式KeyPreview属性设置为true。 在Visual Studio中,您可以在表格[设计]属性窗口或改变负载特性改变这一点。

Private Sub frmTimingP2P_Load(ByVal sender As System.Object, ByVal e As _ 
                               System.EventArgs) Handles MyBase.Load

    Me.KeyPreview = True

End Sub

然后用使用:

Private Sub frmTimingP2P_KeyDown(ByVal Sender As Object, ByVal e As _ 
                        System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown


        If (e.KeyCode = Keys.T AndAlso e.Modifiers = Keys.Control) Then
            MessageBox.Show("Ctrl + T")
        End If

End Sub

或其它程序逻辑在上面的答案为提供。



Answer 4:

我没有马上安装vb.net,但试试这个在您的keydown或按键事件:

If e.KeyCode = Keys.T AndAlso e.Control = True Then
MsgBox("Ctrl + T")
End If


Answer 5:

我会从长码拯救你。 这里:

If e.Control And e.Alt And e.KeyCode = Keys.G Then
    MsgBox("Control Alt G")
End If


文章来源: How do you detect simultaneous keypresses such as “Ctrl + T” in VB.NET?