2010-12-14 11 views
9

Próbuję przechwycić dwie naciśnięcia klawiszy w mojej aplikacji VB.net, dla tego przykładu CTRL + B, poniższy kod nie działa, ale działa dla pojedynczych klawiszy. Próbowałem ustawić keypreview jako prawdziwe, ale nie ma to żadnego efektu.Kombinacja klawiszy 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 

Dzięki

Odpowiedz

16

Klawisz Control jest klawisz modyfikujący. Ten kod testuje dla Ctrl + B

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

Kluczem kodu jest B, ale modyfikatorem jest Ctrl.

Twój fragment kodu, aktualizacja:

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

Idealne, pomyślałem, że będzie to coś prostego! Dzięki :) – Elliott

1

Jeśli spojrzeć na documentation for KeyEventArgs, musisz pamiętać, że klasa eksponuje właściwości ALT, CTRL i modyfikatory, które pozwalają określić, czy te klawisze zostały naciśnięte w oprócz głównego klucza symbolu, który Cię interesuje.

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

Musisz dodać klawisz kontrolny również po modyfikacji, aby działał poprawnie.

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