プロが教える店舗&オフィスのセキュリティ対策術

VBのフォームの
KEYPREVIEWの項目なのですが
今だに意味を把握してません。

VBのヘルプに書いてあることを読んでも
よく分からないのですが
何か実例を上げて説明できる人
教えて頂けませんか?よろしくお願いします。

A 回答 (3件)

こんにちは。

maruru01です。

フォームのKeyPreviewプロパティに「True」を設定すると、フォーム上の各コントロールより先にフォームのキーボードイベント(KeyPress、KeyDown、KeyUp)が発生します。
(例外はあります。)
ヘルプにもありますが、フォーム上で何かキーを押した場合にフォーカスがどこにあるかに関わらず、ある処理をさせる場合に使用します。

例えば、フォーム上に、テキストボックスが10個、コマンドボタンが1個あるとします。
もし、[F1]キーが押されたら、すぐにコマンドボタンをクリックするという処理を付加する場合、テキストボックス1個1個のKeyDownイベントに記述するのは面倒ですし、メンテナンス性もよくありません。
そこで、フォームのKeyPreviewプロパティを「True」にして、フォームのKeyDownイベントに、


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

  If KeyCode = vbKeyF1 Then
    KeyCode = 0
    コマンドボタン1_Click
  End If

End Sub


と書くだけで、フォーム上のどこにフォーカスがある状態で[F1]キーを押しても、上記処理(コマンドボタン1のクリックイベント発生)を行います。
また、
KeyCode = 0
とすることで、キー入力をリセット出来るので、この後に各コントロール(フォーカスがあるコントロール)のキーボードイベントを発生させなく出来ます。

これなら、今後フォーム上に別のコントロールを作成しても、特に新しくコードを記述する必要がありません。
また、1箇所に書かれているので、メンテナンスも楽です。
    • good
    • 0
この回答へのお礼

おぉぉぉ~、すごく分かりやすいです。
バッチシ悩み解決です。
ありがとうございました。

お礼日時:2003/10/15 16:30

既に、参考付きで回答されていますが少しばかり。



簡単に言うと、
どのコントロールにフォーカスがあっても、フォームのKeyイベントを優先的にする。
と言うことになると思います。

Form.KeyPreview = True
Form(フォーム)のKey(キー入力)をPreview(見る)
    • good
    • 0

Windowsの標準ではコントロール間の移動はTabキーで行いますが、テキストボックスに入力した時に次の項目への移動をEnterキー行いたい時は、フォームのKeyPressイベントにおいてSendKeysステートメントでTabキーをアクティブウィンドウに送ります。



この時フォームのキーイベントをテキストボックスのキーイベントより優先的に発生させるために、フォームのKeyPreviewプロパティをTrueにしておく必要があります。
(例
Private Sub Form_Load()
  'フォームのキーイベントが優先されるようにする
  Me.KeyPreview = True
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
  'Enterキー押下時
  If KeyAscii = vbKeyReturn Then
    'TABキーを送信する
    SendKeys "{TAB}"
    'Beepが鳴らないようにここでキー入力を無効にする
    KeyAscii = 0
  End If
End Sub

とこんな感じです。ようはフォームがすべてのキー イベントを受け取る場合は true 。フォーム上で現在選択されているコントロールがキー イベントを受け取る場合は false となります。KeyPreviewをtrue にしてある場合keyイベントはフォームのkeyイベント→コントロールのkeyイベントとこのような順番で処理されます。
    • good
    • 0
この回答へのお礼

分かりやすい説明ありがとうございます。
えっと、フォームにテキストボックスが
1つ置いてあってそのテキストボックスの
KEYPRESSに何か処理が書いてあっても
フォームのKEYPRESSの方が優先されて
実行されるということなんですね。
ふむふむ。

お礼日時:2003/10/15 16:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています