4

現在、MS Access でプログラミングを行っています。フォームのプロパティを調べているときに、「キー プレビュー」という名前のプロパティに出会いました。MS Access のドキュメントには、コントロールのキーボード イベントの前にフォームのキーボード イベントを呼び出すために使用されることが記載されています。

これが何を意味するのかわからないのですが、なぜこのプロパティを使用できるのでしょうか??

4

1 に答える 1

7

KeyPreviewプロパティがtrueに設定されている場合、フォームはコントロールが受信する前にキーボードイベントを受信し、フォームレベルで何かを実行する機会を与えます。

ここで、多くのコントロールを備えたフォームがあると想像してください。
ユーザーがキーボードのF2キーを押して、別のフォームを開いたり、音楽を再生したりするなどのアクションを実行できるようにしたいとします。

Accessでは、ほとんどのUIプログラミングと同様に、一度に1つのコントロールのみがフォーカスを受け取ることができます。したがって、フォーカスがテキストボックスにある場合、F2キーを押すと、そのテキストボックスのキーボードイベントが発生します。
テキストボックスイベントからそのキー押下をキャッチできますが、ユーザーが別のコントロールからF2を押した場合、そのコントロール自体からF2がヒットされたことも検出しない限り、検出されません。

したがって、作業を簡単にするために、フォーカスのあるコントロールに渡される前に、最初にキーボードイベントを受信するようにフォームを設定するだけで、ユーザーがF2を1か所で押したことを検出できます。そのキー押下を検出するために各コントロールを配線します。

mytextbox新しいフォームに単一のテキストボックスを追加します。フォームの背後にあるコードで、フォームとテキストボックスの両方のキーボードイベントをキャッチするための次のイベントを追加します。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "Form_KeyDown(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
    Debug.Print "Form_KeyPress(KeyAscii:" & KeyAscii & ")"
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Debug.Print "Form_KeyUp(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

Private Sub mytextbox_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "mytextbox_KeyDown(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

Private Sub mytextbox_KeyPress(KeyAscii As Integer)
    Debug.Print "mytextbox_KeyPress(KeyAscii:" & KeyAscii & ")"
End Sub

Private Sub mytextbox_KeyUp(KeyCode As Integer, Shift As Integer)
    Debug.Print "mytextbox_KeyUp(keycode:" & KeyCode & ", Shift:" & Shift & ")"
End Sub

次に、フォームを開き、単一のキーを入力します。
キーを押すと、すぐに次のようなものがQ表示されます。

キーボードイベントの制御

テキストボックスのみがイベントを受信しました。

ここで、KeyPreviewプロパティをtrue(はい)に設定し、フォームを開いてを押すとQ、フォームが最初にキーボードイベントを受信したことがわかります。

フォームおよびコントロールキーボードイベント

于 2012-11-02T07:14:03.647 に答える