Form上でKeyDownイベントそうと思うのですがKeyDownイベントが起きません。KeyPreviewもTrueにしてあり、イベントが起こるフォームもあるのですが…。認識しないフォームもあります。モーダルフォームが原因ってこともありますか?それとも他の原因でしょうか?
VB6.0で開発しています
ヘルプにある、以下のケースに当てはまっている可能性はありますか?
|KeyDown イベントおよび KeyUp イベントは次のキー操作では発生しません。
|フォーム上に、Default プロパティが真 (True) に設定されたコマンド ボタン (CommandButton) コントロールがある場合の、Enter キーの操作。
|フォーム上に、Cancel プロパティが真 (True) に設定されたコマンド ボタン コントロールがある場合の、Esc キーの操作。
|Tab キーの操作。
違うということであれば、
現象が再現できる最小限のコードの提示は可能ですか?
すいません説明が少なかったです。KeyDownイベントは矢印(方向)キーに対してのことです。Enterなど他のボタンは起こるのですが矢印キーだけがイベントが起こらず…なぜでしょうか?
ボタンの上では矢印キーはTabと同じように扱われるようですけど、
(KeyDownイベントが発生しない)
VB以前にWindowsの仕様とか。
http://madia.world.coocan.jp/vb/vb_bbs2/200112_01120004.html
そういうことですか?
特にコマンドボタンやテキストボックスにフォーカスが移ってしまうわけではないのですが…。KeyPreview以外で設定違いみたいのありますかね…?
まぁWindowsの仕様なら仕方ないですけど…
私の環境ではカーソルキーでもイベント発生してますが・・・
このプログラムではコマンドボタンなどが設置されていませんでしたが、試しに設置してみたところ、ちゃんとイベントが発生しました
ボタンを一度クリックしフォーカスを移動させてから試しても、一度カーソルキーを押せばフォームにフォーカスが移動し、次からイベントが発生しました
一応コードを載せておきます
Private Sub Form_Keydown(KeyCode As Integer, shift As Integer)
If key_on = True Then
Exit Sub
End If
key_on = True
'メイン
If KeyCode = vbKeyUp Then
※上処理ルーチンへ
GoTo exit_key
End If
If KeyCode = vbKeyLeft Then
※左処理ルーチンへ
GoTo exit_key
End If
If KeyCode = vbKeyDown Then
※下処理ルーチンへ
GoTo exit_key
End If
If KeyCode = vbKeyRight Then
※右処理ルーチンへ
GoTo exit_key
End If
key_on = False
Exit Sub
'チェック
exit_key:
※以下略
つくりが悪いプログラムかもしれませんが、参考になればと思います
通ってみたさんありがとうございます。上のプログラムだと上手く行きますね!しかし、今制作しているプログラムだと…。自分は今簡単に言うとForm1のコマンドボタンを押すと「Form2.Show 1」が起こりForm2が表示されます。Form1ではコマンドボタンがあるにもかかわらずKeyDownが起きるのですが、モーダルで表示したForm2では動きません…という状況です。
Form1の方ではイベントが起きてませんか?
制御がForm1側に取られているようであれば、一旦Form1のEnableをFalseにしてみるとか
もげさんも仰っておられますが、実際のコード等が一切提示されていないとこれ以上の回答は付かないかもしれません
ツイート | ![]() |