Как вы обнаруживаете одновременные нажатия клавиш, такие как "Ctrl + T" в VB.NET?
Я пытаюсь обнаружить, что клавиши "Control" и " t " нажаты одновременно в VB.NET - ... Код, который у меня есть до сих пор, выглядит следующим образом:
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
Я могу обнаружить один ключ или другой, удалив оператор and и второй оператор keyvalue, но я ничего не получаю, когда пытаюсь это сделать. Есть ли другой способ?
спасибо
5 ответов
прежде всего,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 …
в обоих фрагментах мы используем битовые маски.
Private Sub frmMain_Zaporka_KeyDown (отправитель как объект, e Как 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
End Sub
у меня была та же проблема, но для меня, чтобы заставить это работать, я должен был установить формы KeyPreview свойство правда. В Visual studio это можно изменить в окне Свойства Forms [Design] или изменить свойство при загрузке.
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
или другая логика программы, как указано в ответах выше.
У меня нет vb.net установлено прямо сейчас, но попробуйте это на вашем keydown или keypress event:
If e.KeyCode = Keys.T AndAlso e.Control = True Then
MsgBox("Ctrl + T")
End If
Я спасу вас от длинного кода. Здесь:
If e.Control And e.Alt And e.KeyCode = Keys.G Then
MsgBox("Control Alt G")
End If