Form上でKeyDownイベントを起こすには?


アフリケ  2006-12-14 21:11:34  No: 134596

Form上でKeyDownイベントそうと思うのですがKeyDownイベントが起きません。KeyPreviewもTrueにしてあり、イベントが起こるフォームもあるのですが…。認識しないフォームもあります。モーダルフォームが原因ってこともありますか?それとも他の原因でしょうか?


アフリケ  2006-12-14 21:13:06  No: 134597

VB6.0で開発しています


もげ  2006-12-15 00:07:38  No: 134598

ヘルプにある、以下のケースに当てはまっている可能性はありますか?

|KeyDown イベントおよび KeyUp イベントは次のキー操作では発生しません。 
|フォーム上に、Default プロパティが真 (True) に設定されたコマンド ボタン (CommandButton) コントロールがある場合の、Enter キーの操作。
|フォーム上に、Cancel プロパティが真 (True) に設定されたコマンド ボタン コントロールがある場合の、Esc キーの操作。
|Tab キーの操作。 

違うということであれば、
現象が再現できる最小限のコードの提示は可能ですか?


アフリケ  2006-12-15 08:43:25  No: 134599

すいません説明が少なかったです。KeyDownイベントは矢印(方向)キーに対してのことです。Enterなど他のボタンは起こるのですが矢印キーだけがイベントが起こらず…なぜでしょうか?


もげ  2006-12-15 18:39:44  No: 134600

ボタンの上では矢印キーはTabと同じように扱われるようですけど、
(KeyDownイベントが発生しない)
VB以前にWindowsの仕様とか。

http://madia.world.coocan.jp/vb/vb_bbs2/200112_01120004.html

そういうことですか?


アフリケ  2006-12-16 04:22:30  No: 134601

特にコマンドボタンやテキストボックスにフォーカスが移ってしまうわけではないのですが…。KeyPreview以外で設定違いみたいのありますかね…?
まぁWindowsの仕様なら仕方ないですけど…


通ってみた  2006-12-16 23:19:54  No: 134602

私の環境ではカーソルキーでもイベント発生してますが・・・

このプログラムではコマンドボタンなどが設置されていませんでしたが、試しに設置してみたところ、ちゃんとイベントが発生しました
ボタンを一度クリックしフォーカスを移動させてから試しても、一度カーソルキーを押せばフォームにフォーカスが移動し、次からイベントが発生しました

一応コードを載せておきます

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:

※以下略

つくりが悪いプログラムかもしれませんが、参考になればと思います


アフリケ  2006-12-18 00:25:32  No: 134603

通ってみたさんありがとうございます。上のプログラムだと上手く行きますね!しかし、今制作しているプログラムだと…。自分は今簡単に言うとForm1のコマンドボタンを押すと「Form2.Show 1」が起こりForm2が表示されます。Form1ではコマンドボタンがあるにもかかわらずKeyDownが起きるのですが、モーダルで表示したForm2では動きません…という状況です。


通ってみた  2006-12-18 16:11:43  No: 134604

Form1の方ではイベントが起きてませんか?
制御がForm1側に取られているようであれば、一旦Form1のEnableをFalseにしてみるとか

もげさんも仰っておられますが、実際のコード等が一切提示されていないとこれ以上の回答は付かないかもしれません


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加