メニューにフォーカスが当たらないようにするには?

解決


たき  2003-08-12 02:31:00  No: 108077

現在とあるツールを作っており、
キーボードだけでも使えるように、12個あるボタンを、
それぞれF1〜F12に割り当て、ファンクションキーの押下を、
Form_KeyDownイベントで拾い、
それぞれのボタンのクリックイベントをコールしています。
ですが、F10キーを押した時に、
メニューにもフォーカスが当たってしまう為、
F10キーの後にカーソルキーを押すと、
メニューが動作してしまいます。
F10キーを押しても、メニューにフォーカスが当たらないようにするには、
どうすればいいのでしょうか。

現在、Call SendKeys(vbNullChar, True)とやることで、
無理やり回避していますが、F10を連打したり、
押しっぱなしにすると、やはりメニューも動作してしまいます。
なにかいい方法がありましたら、教えてください。
宜しくお願いします。


Take1  2003-08-20 02:42:37  No: 108078

こんにちは
これはどうでしょうか?

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyF10 Then
        KeyCode = 0
        MsgBox "F10キーが押されました。"
    End If
End Sub

正常に動作するかな?


たかみちえ  URL  2003-08-20 03:58:30  No: 108079

全部のメニューをループして、
EnabledをFalseにするというのは?
試してないものの、うまくいくんじゃないでしょうか?

  または、F10をショートカットキーに持ったメニューを、
別に作っておいて、そこで何もしなければ、うまく動くかも知れませんね。


たかみちえ  URL  2003-08-20 04:02:37  No: 108080

あ、もちろんルート(一番親、フォーム上に表示されてるもの)を含め全部ですよ。
  あと聞いた話ですけど、"Visible=Falseというプロパティは、本来メニューにはないので、
VBは該当メニューを削除することで、これを実現している"という話を聞いたことがあります。
なので、親メニューだけでもVisible=Falseにすることで、メニューにフォーカスは行かなくなるかもしれません。

  なんというか、一番上より可能性が高い気がしてきました。
その代わり、見た目に影響を与えますけどね。


たき  2003-08-20 18:21:11  No: 108081

Take1さん、たかみちえさんどうもありがとうございます。
今回はTake1さんのやり方を使わせていただきました。
いまところ、問題はなさそうです。
KeyCode = 0
とするのは思いつきませんでした。
どうもありがとうございました。

あと、たかみちえさんの発言に
"Visible=Falseというプロパティは、本来メニューにはないので、
VBは該当メニューを削除することで、これを実現している"
とありますが、これが本当だとすると、
Visible=True  とすると、VBが該当メニューを作成している、
ということなのでしょうか。


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

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






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