How do you detect simultaneous keypresses such as “Ctrl + T” in VB.NET?

前端 未结 5 616
甜味超标
甜味超标 2021-01-02 03:34

I am trying to detect the keys \"Control\" and \"t\" being pressed simultaneously in VB.NET. The code I have so far is as follows:

Private Sub frmTimingP2P_K         


        
相关标签:
5条回答
  • 2021-01-02 03:39

    Private Sub frmMain_Zaporka_KeyDown(sender As Object, e As KeyEventArgs) Handles 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
    

    End Sub

    0 讨论(0)
  • 2021-01-02 03:45

    First of all, And in your code should be AndAlso since it’s a logical operator. And in VB is a bit operator. Next, you can use the Modifiers property to test for modifier keys:

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

    The e.KeyCode And Not Keys.Modifiers in the first part of the condition is necessary to mask out the modifier key.

    If e.Modifiers = Keys.Ctrl can also be written as If e.Control.

    Alternatively, we can collate these two queries by asking directly whether the combination Ctrl+T was pressed:

    If e.KeyCode = (Keys.T Or Keys.Ctrl) Then …
    

    In both snippets we make use of bit masks.

    0 讨论(0)
  • 2021-01-02 03:54

    I had the same problem, but for me to get this to work I had to set the forms KeyPreview property to true. In Visual studio you can change this in the Forms [Design] Property window or changing the property on load.

    Private Sub frmTimingP2P_Load(ByVal sender As System.Object, ByVal e As _ 
                                   System.EventArgs) Handles MyBase.Load
    
        Me.KeyPreview = True
    
    End Sub
    

    then use by using:

    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
    

    or other program logic as provided in the answers above.

    0 讨论(0)
  • 2021-01-02 03:54

    I dont have vb.net installed right now but try this on your keydown or keypress event:

    If e.KeyCode = Keys.T AndAlso e.Control = True Then
    MsgBox("Ctrl + T")
    End If
    
    0 讨论(0)
  • 2021-01-02 04:05

    I'll save you from the long code. Here:

    If e.Control And e.Alt And e.KeyCode = Keys.G Then
        MsgBox("Control Alt G")
    End If
    
    0 讨论(0)
提交回复
热议问题