• ベストアンサー

KEYPREVIEW=TRUEについて。意味が分かりません・・。

VBのフォームの KEYPREVIEWの項目なのですが 今だに意味を把握してません。 VBのヘルプに書いてあることを読んでも よく分からないのですが 何か実例を上げて説明できる人 教えて頂けませんか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。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箇所に書かれているので、メンテナンスも楽です。

GBSGBS
質問者

お礼

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

その他の回答 (2)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.3

既に、参考付きで回答されていますが少しばかり。 簡単に言うと、 どのコントロールにフォーカスがあっても、フォームのKeyイベントを優先的にする。 と言うことになると思います。 Form.KeyPreview = True Form(フォーム)のKey(キー入力)をPreview(見る)

  • kou2000
  • ベストアンサー率29% (14/48)
回答No.1

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イベントとこのような順番で処理されます。

GBSGBS
質問者

お礼

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

関連するQ&A