![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- 物理学 黄色マーカVbと書いてあるのですがVaの間違いですかね? また左の項ですと、積分範囲∫(r1→a)で 1 2023/06/21 15:29
- 工学 電気回路について質問があります。 テブナン関連の問題なのですが、青線ないの意味がよくわかりません。な 4 2023/01/17 16:51
- 英語 自動詞のhopeについて 5 2023/03/12 02:34
- 英語 "a report into..."の"into"の意味について 9 2023/05/12 18:18
- 工学 非対称三相交流について 2 2022/07/06 00:36
- 日本語 意味とは何か、どこにあるのか? 16 2022/04/09 11:44
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- 相続・贈与 おじの山林権利を父に移したい 4 2022/07/17 11:11
- その他(ブラウザ) Goog検索で自分の情報を出さないようにするには? 1 2022/06/10 08:02
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA ユーザーフォームの Keypreview について
Visual Basic(VBA)
-
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
矢印(左右)キーでイベントを発生させたい。
Visual Basic(VBA)
-
-
4
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
5
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
6
Ctrlキーが押されたことの検出
Excel(エクセル)
-
7
コマンドボタンがあるかどうかを取得するには?
PowerPoint(パワーポイント)
-
8
CloseとDisposeの違い
Visual Basic(VBA)
-
9
テーブルに主キーを作らないデメリットは?
その他(Microsoft Office)
-
10
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
11
DoEventsがやはり分からない
Visual Basic(VBA)
-
12
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL VBA----ユーザーフォーム...
-
タブキー押下時のイベントをひ...
-
VB IEブラウザへのキーイベント...
-
Excel VBA マクロ実行中のみテンキ...
-
HTMLでこの画像を表示したいで...
-
uwscについて、同一の画像(仮...
-
「PC Helpsoft Driver Updated...
-
「ご処理進めて頂きますようお...
-
リョウ・・・量?料?
-
FFTの結果ついて
-
お家デートをしててハグを長い...
-
Googleフォーム・複数人の申し...
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
-
同じ画像を複数回表示させる
-
VBAにてメッセージボックスを最...
-
Excel ラジオボタンのリセット...
-
メルカリのメルカードで買い物...
-
背景画像の繰り返しについて
-
Accessで縦と横を入れ替えたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB】タブ切り替え時のイベント
-
特定のキーを押すまでループさ...
-
タブキー押下時のイベントをひ...
-
Visual Basic 6.0 コンボボック...
-
一定時間操作されないと自動で...
-
WPFでの時刻入力コントロールに...
-
(VBA)チェックボックスのclick...
-
コンボボックスにキー入力をさ...
-
VB.NETのDropDownListをReadOnl...
-
VB.NETでフォームがない...
-
NULLで検索を行ったときは全件...
-
Excel VBA マクロ実行中のみテンキ...
-
KEYPREVIEW=TRUEについて。意味...
-
エクセルVBAのテキストボック、...
-
テキストボックスの入力文字を1...
-
フォーカスについてお教えください
-
【Mouse Down】キーリピートを...
-
キーイベントを擬似的に発生さ...
-
VB6で電卓を作っているのですが...
-
複数のテキストボックスのカン...
おすすめ情報