2009-02-10 100 views
2

鍵釋放時觸發按鍵事件。這適用於普通按鍵,如a,b等。然而,按住箭頭鍵或退出鍵會產生不同的結果。 而不是在釋放按鍵時觸發按鍵事件,而是在按鍵事件之後立即觸發事件。所以,按住一個箭頭鍵變成等於非常快速地按壓和釋放該鍵多次。 任何解釋和解決辦法,以確定密鑰何時實際發佈?.NET中的鍵盤事件

回答

3

KeyUp事件實際上並沒有被觸發(對於所有的鍵不僅僅是方向鍵等),直到你釋放鍵時,只有許多重複的KeyDown事件。至少,這是它從一些測試代碼看待我的方式。

我的解決方法是使用

RemoveHandler Me.KeyDown, AddressOf Form1_KeyDown 

,然後重新啓用時KeyUp事件被觸發檢測到KeyDown事件後禁用的KeyDown處理程序。

AddHandler Me.KeyDown, AddressOf Form1_KeyDown 

當然,如果你想同時處理多個按鍵,那麼這是行不通的。您必須存儲相關密鑰是否已關閉,並忽略相應的KeyDown事件。

1

我剛剛遇到類似的問題。鍵盤處理行爲怪異:

如果對焦和處理程序是在文本框:

  • 當字母數字鍵被按下,我得到了多個新聞Down事件
  • 箭頭鍵和功能鍵產生多個Down事件

如果爲啓用KeyPreview的表單處理事件,則僅處理箭頭鍵的KeyUp事件。

通過重寫ProcessCmdKey可以處理較低級別的所有密鑰。

如果你想處理一個左箭頭鍵:

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean 
    Select Case keyData 
     Case Keys.Left 
      Debug.WriteLine("Left") 
      Return True 
     Case Else 
      Return MyBase.ProcessCmdKey(msg, keyData) 
    End Select 
End Function