2013-05-12 4 views
0

Мое приложение основано на Visual Basic 2010/2012 (все его коды одинаковы для обоих языков). Я пытаюсь сделать некоторые вещи, когда нажата клавиша 'F' or 'G'. Я пробовал все, например, используя Keypress, keydown and keyup events, но все они не работали.Keypress in not read in visual basic 2010/2012

Вот пример кода моего приложения. Это просто показывает, какой ключ был нажат пользователем в окне сообщения, и это также не работает, то есть ничего не происходит, даже сообщение об ошибке.

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 

    If (e.KeyCode = Keys.Control AndAlso (e.KeyCode = Keys.F)) Then 
     MessageBox.Show("pressed F") 
    ElseIf (e.KeyCode = Keys.Control AndAlso (e.KeyCode = Keys.B)) Then 
    MessageBox.Show("pressed B") 
    End If 
End Sub` 
+2

Вы задали свойство keypreview формы? –

+0

KeyDown - правильный выбор. Просто включите KeyPreview, как упоминал @Tony. – Neolisk

ответ

0

Мой взгляд на оптимизацию KeyDown обработчика, используя принцип DRY (= не повторять себя):

Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
    If Not e.Control Then Exit Sub 
    Select Case e.KeyCode 
    Case Keys.F : MessageBox.Show("Ctrl-F") 
    Case Keys.B : MessageBox.Show("Ctrl-B") 
    End Select 
End Sub 
+0

спасибо. это сработало. – TechDivyansh

0

В дополнение к установке KeyPreview() в True для формы, как уже указывал @Tony Хопкинсона, вот как правильно проверить Ctrl-F или Ctrl-B:

Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
    If e.Control AndAlso e.KeyCode = Keys.F Then 
     MessageBox.Show("Ctrl-F") 
    ElseIf e.Control AndAlso e.KeyCode = Keys.B Then 
     MessageBox.Show("Ctrl-B") 
    End If 
End Sub 
+0

Я думаю, что вы имели в виду 'KeyPreview', а не' KeyDown'. – Neolisk

+0

Ха-ха ... спасибо за исправление @ Неолиск. –

0

В KeyPressed

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress 
dim kc as string = e.KeyChar 

if kc = "F" OR kc = "G" then msgbox "Horeeee" 
End Sub 
+0

Спасибо всем за вашу любезную помощь. – TechDivyansh