
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箇所に書かれているので、メンテナンスも楽です。
No.3
- 回答日時:
既に、参考付きで回答されていますが少しばかり。
簡単に言うと、
どのコントロールにフォーカスがあっても、フォームのKeyイベントを優先的にする。
と言うことになると思います。
Form.KeyPreview = True
Form(フォーム)のKey(キー入力)をPreview(見る)
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イベントとこのような順番で処理されます。
分かりやすい説明ありがとうございます。
えっと、フォームにテキストボックスが
1つ置いてあってそのテキストボックスの
KEYPRESSに何か処理が書いてあっても
フォームのKEYPRESSの方が優先されて
実行されるということなんですね。
ふむふむ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA ユーザーフォームの Keypreview について
Visual Basic(VBA)
-
エクセルVBA フォーム上でOnkeyがうまく出来ない
Excel(エクセル)
-
ExcelVBAのユーザーフォームでescキーを使う方法
Visual Basic(VBA)
-
-
4
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
5
アクセスVBAのMe!と[ ]
Access(アクセス)
-
6
CloseとDisposeの違い
Visual Basic(VBA)
-
7
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
8
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一定時間操作されないと自動で...
-
特定のキーを押すまでループさ...
-
コンボボックスにキー入力をさ...
-
SelectionChangeCommitted
-
VBA・WebBrowserコントロールで...
-
TextboxまたはMaskEditboxでの...
-
WPFでの時刻入力コントロールに...
-
Objective-Cでキーボードイベン...
-
KEYPREVIEW=TRUEについて。意味...
-
NULLで検索を行ったときは全件...
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
-
エクセルVBAで、MsgBox やInput...
-
VBAでループ内で使う変数名を可...
-
エクセルで、日付を入力すると...
-
Excelシート上のマクロを登録し...
-
メルカリのメルカードで買い物...
-
UMLでの例外処理
-
エクセルの画面にユーザーフォ...
-
アクセスVBA フォームのス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB】タブ切り替え時のイベント
-
特定のキーを押すまでループさ...
-
KEYPREVIEW=TRUEについて。意味...
-
WPFでの時刻入力コントロールに...
-
Visual Basic 6.0 コンボボック...
-
タブキー押下時のイベントをひ...
-
(VBA)チェックボックスのclick...
-
コンボボックスにキー入力をさ...
-
EXCEL VBA でIEを制御して、INP...
-
VB.NETのDropDownListをReadOnl...
-
VB.NETでフォームがない...
-
NULLで検索を行ったときは全件...
-
キーバッファについての質問
-
フォーカスについてお教えください
-
Excel VBA マクロ実行中のみテンキ...
-
コントロールキーが押されたキ...
-
vba set Focus
-
テキストボックスの入力文字を1...
-
一定時間操作されないと自動で...
-
キーイベントを擬似的に発生さ...
おすすめ情報