いくつかのコントロールを持つフォームがあります。コントロールイベントに関係なく、キーダウンイベントで特定のサブを実行したい。ユーザーがフォームの任意の場所で Ctrl+S を押すと、サブルーチンが実行されます。
36872 次
2 に答える
21
フォームのKeyPreviewプロパティを True に設定し、そこで keydown イベントを処理する必要があります。
このプロパティが true に設定されている場合、フォームはすべての KeyPress、KeyDown、および KeyUp イベントを受け取ります。フォームのイベント ハンドラーがキーストロークの処理を完了すると、キーストロークはフォーカスのあるコントロールに割り当てられます。.......... フォーム レベルでのみキーボード イベントを処理し、コントロールがキーボード イベントを受信できないようにするには、フォームの KeyPress イベント ハンドラの KeyPressEventArgs.Handled プロパティを true に設定します。
したがって、たとえば、Control+S キーの組み合わせを処理するには、フォームの KeyDown イベントに対してこのイベント ハンドラーを記述できます。
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
If e.Control AndAlso e.KeyCode = Keys.S then
' Call your sub method here .....
YourSubToCall()
' then prevent the key to reach the current control
e.Handled = False
End If
End Sub
于 2012-12-05T15:55:39.327 に答える
2
以前にこのコードをフォームで使用したことがありますが、かなりうまく機能しているようです。
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
于 2012-12-05T16:01:25.553 に答える