2009-02-10 5 views
2

키를 눌렀을 때 키 업 이벤트가 트리거됩니다. 이것은 a, b 등의 일반 키에는 적용됩니다. 그러나 화살표 키 또는 escape 키를 누르면 다른 결과가 나옵니다. 키를 놓을 때 키 업 이벤트를 시작하는 대신 키 다운 이벤트가 발생하면 곧 바로 시작됩니다. 따라서 화살표 키를 길게 누르면 여러 번 키를 눌렀다 놓는 속도가 매우 빨라집니다. 설명과 해결 방법을 통해 키가 실제로 해제되었는지 확인하십시오..NET의 키보드 이벤트

답변

3

키를 놓을 때까지 KeyUp 이벤트가 실제로 실행되지 않습니다 (화살표 키가 아닌 모든 키). KeyDown 이벤트가 반복적으로 많이 발생합니다. 적어도, 그것은 그것이 어떤 테스트 코드에서 나에게 보이는 방식이다.

내 해결 방법은 KeyDown 이벤트이어서

RemoveHandler Me.KeyDown, AddressOf Form1_KeyDown 

하고 다시 사용하도록 KeyUp 이벤트가 소성하여 검출 후 처리기에서 KeyDown을 해제한다.

AddHandler Me.KeyDown, AddressOf Form1_KeyDown 

물론 여러 개의 키를 동시에 눌러서 처리하려는 경우에는 작동하지 않습니다. 문제의 키가 이미 다운 되었는 지 여부를 저장하고 각각의 KeyDown 이벤트를 무시해야합니다.

1

비슷한 문제가 발생했습니다. 키보드 핸들러는 이상한 동작 :

초점과 핸들러는 텍스트 상자에있는 경우 : 여러 눌러 다운 이벤트가

  • 화살표와 기능 키가 아래로 여러 이벤트
  • 숫자 키를 누르고
    • , 내가 가진 생산하고

    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