
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)
-
keypressイベントでEnterキー(ascii=13)が認識できない
Visual Basic(VBA)
-
アクセスVBAのMe!と[ ]
Access(アクセス)
-
-
4
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
5
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
6
エクセルVBA フォーム上でOnkeyがうまく出来ない
Excel(エクセル)
-
7
CloseとDisposeの違い
Visual Basic(VBA)
-
8
ExcelVBAのユーザーフォームでescキーを使う方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タブキー押下時のイベントをひ...
-
【VB】タブ切り替え時のイベント
-
テキストボックスの入力文字を1...
-
VB.NETのDropDownListをReadOnl...
-
コンボボックスにキー入力をさ...
-
(VBA)チェックボックスのclick...
-
特定のキーを押すまでループさ...
-
KEYPREVIEW=TRUEについて。意味...
-
コマンドボタン(入力)をクリッ...
-
DelphiのStringGridについて
-
VBでイベント処理を追加する...
-
WinAPIのキー操作についての質...
-
Excel VBA マクロ実行中のみテンキ...
-
エクセルVBAのテキストボック、...
-
Visual Basic 6.0 コンボボック...
-
エクセルで、日付を入力すると...
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
-
同じ画像を複数回表示させる
-
エクセルVBAで、MsgBox やInput...
マンスリーランキングこのカテゴリの人気マンスリー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...
-
一定時間操作されないと自動で...
-
キーイベントを擬似的に発生さ...
おすすめ情報