現在とあるツールを作っており、
キーボードだけでも使えるように、12個あるボタンを、
それぞれF1〜F12に割り当て、ファンクションキーの押下を、
Form_KeyDownイベントで拾い、
それぞれのボタンのクリックイベントをコールしています。
ですが、F10キーを押した時に、
メニューにもフォーカスが当たってしまう為、
F10キーの後にカーソルキーを押すと、
メニューが動作してしまいます。
F10キーを押しても、メニューにフォーカスが当たらないようにするには、
どうすればいいのでしょうか。
現在、Call SendKeys(vbNullChar, True)とやることで、
無理やり回避していますが、F10を連打したり、
押しっぱなしにすると、やはりメニューも動作してしまいます。
なにかいい方法がありましたら、教えてください。
宜しくお願いします。
こんにちは
これはどうでしょうか?
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF10 Then
KeyCode = 0
MsgBox "F10キーが押されました。"
End If
End Sub
正常に動作するかな?
全部のメニューをループして、
EnabledをFalseにするというのは?
試してないものの、うまくいくんじゃないでしょうか?
または、F10をショートカットキーに持ったメニューを、
別に作っておいて、そこで何もしなければ、うまく動くかも知れませんね。
あ、もちろんルート(一番親、フォーム上に表示されてるもの)を含め全部ですよ。
あと聞いた話ですけど、"Visible=Falseというプロパティは、本来メニューにはないので、
VBは該当メニューを削除することで、これを実現している"という話を聞いたことがあります。
なので、親メニューだけでもVisible=Falseにすることで、メニューにフォーカスは行かなくなるかもしれません。
なんというか、一番上より可能性が高い気がしてきました。
その代わり、見た目に影響を与えますけどね。
Take1さん、たかみちえさんどうもありがとうございます。
今回はTake1さんのやり方を使わせていただきました。
いまところ、問題はなさそうです。
KeyCode = 0
とするのは思いつきませんでした。
どうもありがとうございました。
あと、たかみちえさんの発言に
"Visible=Falseというプロパティは、本来メニューにはないので、
VBは該当メニューを削除することで、これを実現している"
とありますが、これが本当だとすると、
Visible=True とすると、VBが該当メニューを作成している、
ということなのでしょうか。
ツイート | ![]() |