2012-12-05 5 views
10

몇 가지 컨트롤이있는 양식이 있습니다. 모든 컨트롤 이벤트에 관계없이 keydown 이벤트에 대한 특정 하위 항목을 실행하려고합니다. 사용자가 Ctrl + S를 누를 경우 어디서든 서브 루틴을 실행할 수 있습니다.vb.net 전체 양식의 Keydown 이벤트

답변

17

당신은 True로 양식에 KeyPreview 속성을 설정하고 거기를 keyDown 이벤트이 속성을 true로 설정

을 처리해야 양식 모든 키를 누를 때, 에서 KeyDown과의 keyup 이벤트를 받게됩니다. 양식의 이벤트 처리기에 키 입력이 완료되면 키 입력이 포커스가있는 컨트롤에 할당됩니다. ......... 키보드 이벤트를 폼 수준에서만 처리하고 컨트롤에서 키보드 이벤트를 수신하도록 허용하지 않으려면 폼의 KeyPress 이벤트 처리기에서 KeyPressEventArgs.Handled 속성을 true로 설정하십시오.

예를 들어 Ctrl + S 키 조합을 처리하려면 KeyDown 이벤트 양식에이 이벤트 처리기를 쓸 수 있습니다.

+0

감사합니다. 스티브 ... 매우 도움이됩니다. – Malik

1

이전에이 코드를 제 양식에 사용했는데 제대로 작동하는 것 같습니다.

Protected Overrides Function ProcessKeyPreview(ByRef m As System.Windows.Forms.Message) As Boolean 
    If m.Msg = &H100 Then 'WM_KEYDOWN 
     Dim key As Keys = m.WParam 
     If key = Keys.S And My.Computer.Keyboard.CtrlKeyDown Then 
      'DO stuff 
      Return True 
     End If 
    End If 

    Return MyBase.ProcessKeyPreview(m) 
End Function