Form_KeyDownについて

解決


ど素人  2006-05-17 22:33:53  No: 131455

VB6 Windows XPです。
Form_KeyDownでお教えください。
フォームに3個のコマンドボタンを配置していますが、コマンド
ボタンとは関係なくkeyを押しても別の処理を行いたいと思って
います。
でも必ずどこかのコマンドボタンにフォーカスがあって、キーを
押しても、フォーカスのあるボタンが押されたのと同様の処理を
行ってしまします。どのコントロールにもフォーカスしていない
状態ってどうのようにしたら作れるのでしょうか。
・Form のKeyPreviewはTrueにしています。
・全部のコントロールはTabStopをFalseにしています。
よろしくお願いします。


魔界の仮面弁士  2006-05-17 23:16:34  No: 131456

> どのコントロールにもフォーカスしていない
> 状態ってどうのようにしたら作れるのでしょうか。
どこにもフォーカスが無い状態、すなわち、
  Private Sub Form_Click()
    If Me.ActiveControl Is Nothing Then
      MsgBox "フォーカスなし"
    End If
  End Sub
でメッセージが表示されるような状況というのは、
『フォーカス移動可能なコントロールが無い時』だけです。

(コントロール自体が存在していても、それらすべてが、Visible = False や
 Enabled = False などといった状態になっていれば OK)


> ・Form のKeyPreviewはTrueにしています。
KeyPreview を指定しても、一部のキー(矢印キーなど)については、
ボタン系コントロール(CommandButton, CheckBox等)にフォーカスが
ある状態では、KeyDown イベントが発生しない仕様です。
(サブクラス化して、キー押下を判定する事は可能ですけれども)

> ・全部のコントロールはTabStopをFalseにしています。
TabStop は、Tabキーでの移動を制限するだけであって、
マウスクリック操作や SetFocusメソッドなどによるフォーカス移動を
制限するわけではありません。


犬ひろし  2006-05-18 09:16:07  No: 131457

こういうことかな?


Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
    Call Form_KeyDown(KeyCode, Shift)
    KeyCode = 0
    Shift = 0
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'//KeyDown処理
End Sub

こちらにも目を通しておくといいでしょう。

http://madia.world.coocan.jp/vb/vb_bbs2/200305_03050048.html


ど素人  2006-05-18 12:49:53  No: 131458

魔界の仮面弁士さま、犬ひろしさまご指導ありがとうございました。
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
    Call Form_KeyDown(KeyCode, Shift)
    KeyCode = 0
    Shift = 0
End Sub
理解できました。解決です。すべてのCommand  Controlについてすべて記
述するのがかなり手間でしたが・・・・。

自分なりに挑戦してたやりかたも記述しておきます。(邪道でしょうけど)
コンボボックスもフォーム内にありますので、常にフォーカスがコンボボ
ックスにあたるようMe.Combo1.SetFocusをそこら中に書きまくるってやり
かたです。フォーカスがコンボボックスにあるときはForm_KeyDownが支障
なく機能してくれます。


ど素人  2006-05-18 13:40:34  No: 131459

解決チェック忘れてました。


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

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







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