2013-05-12 48 views
0

我的應用程序基於Visual Basic 2010/2012(所有的代碼都是相同的兩種語言)。當我從鍵盤按下'F' or 'G'時,我正在嘗試做某些事情。我試過所有的東西,如使用Keypress, keydown and keyup events,但他們都沒有工作。按鍵在未閱讀視覺基本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屬性? – 2013-05-12 15:33:08

+0

KeyDown是正確的選擇。就像@Tony提到的那樣啓用KeyPreview。 – Neolisk 2013-05-12 15:40:12

回答

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 2013-05-14 13:53:28

0

除了設置的KeyPreview(),以真爲你,如已經指出的@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 2013-05-12 15:47:23

+0

哈哈......感謝修正@Neolisk。 – 2013-05-12 15:53:16

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 2013-05-14 13:52:31