2012-12-05 7 views
10

私はいくつかのコントロールを持つフォームを持っています。私は、制御イベントに関係なくkeydownイベントの特定のサブを実行したい。 つまり、フォーム上のどこでもCtrl + Sキーを押すと、サブルーチンが実行されます。vb.net全体フォームのKeydownイベント

答えて

17

あなたは、このプロパティをtrueに設定すると、フォームがすべてのKeyPressイベント、 KeyDownイベント、およびからkeyupイベントを受け取ることになります

がTrueに、フォーム上の KeyPreviewプロパティを設定し、keydownのイベントを処理する必要があります。フォームのイベントハンドラが がキーストロークの処理を完了した後、キーストロークはフォーカスを持つコントロール に割り当てられます。 .........キーボードの イベントをフォームレベルでのみ処理し、コントロールに キーボードイベントを受け取らないようにするには、 フォームのKeyPressイベントハンドラのKeyPressEventArgs.Handledプロパティをtrueに設定します。

たとえば、Control + Sキーの組み合わせを処理するには、このイベントハンドラをKeyDownイベントのフォーム用に作成します。

+0

ありがとうSteve ...その非常に役立つ – 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 
関連する問題