コンボボックス(Styleプロパティ=0)にフォーカスが存在する時に、
F4キーを押すとドロップダウンリストが表示されると思うのですが、
それを表示しないようにするにはどうしたらよいでしょうか?
コンボボックスなら、keybd_eventとかでEscキーを押させたら閉じないですか?
ご回答ありがとうございました。
早速試してみたのですが、閉じることはできるのですが、
一瞬リストが表示されてしまいます。
それを全く表示しないようにしたいのですが、できないでしょうかね?
おすすめではありませんが、
フックしてキーを殺すとか
Sayさん、ご回答ありがとうございました。
例の画面には、入力項目がたくさんあるので、
フックは使えないですよね。。。
うーん、やはり実現は難しいのでしょうか。。。
>例の画面には、入力項目がたくさんあるので、
>フックは使えないですよね。。。
殺したいキー以外は何もせず戻してやれば
いいだけでは?
Sayさん、ありがとうございます。
フックに関しては、勉強不足だったようです。
SetWindowLong()などを調べてみましたが、
全然わかっていないなーと我ながら痛感しました。
(説明を読んでもわからないままでした。。。(T_T))
もう少し調べてから、また質問させていただくことになるかもしれません。
ただ、F4キーは他の動作をするようにしたいため、
F4キー自体を殺してしまうことはおそらくできないでしょうね。
いくつか方法を思いつきました。いずれも使えるかどうか…^^;
1.EnabledをFalseにする。
たしかにドロップダウンしませんけど、当然選択もできません^^;
2.コンボボックスもどきのユーザーコントロールを作ってしまう。
十字キー(というのかな?)で項目はかえられるけど、ドロップダウンしない…というのなら、
リストボックスをユーザーコントロールにおいて、一項目しか見えないようにして、
上下にDrawEdgeで枠を描いて、右端にある矢印のついたボタンを描けば、
とりあえずできると思います。
あとは、一行テキストボックスにボタンを描いて、矢印キーが押されたら、内容を書き換えて文章を選択させる…とか。
3.F4の直後にEscを押して閉じるようにするとして、そのあいだドロップダウンリストが出る部分をどうにかして隠す。
うまく隠さないと、かえって不自然かも…。
どうでしょうか?2はちょっといいんじゃないかなと思います。実装までが面倒ですけど…。
一行テキストボックスに…。というのは、わりと難しくはないような…。
(ドロップダウンリストとして使ってるなら、ちょっと難しそうですけど)
たかみちえさん、いろいろ考えてくださってようで、
どうもありがとうございました(^-^
が、しかし、コンボのドロップダウン機能は全く不要なのではなく、
右端のドロップダウンのボタンが押されたら、
普通にドロップダウンでリスト表示・選択したいですし、
それにF4キーではリストを表示したくないのですが、
その代わりにF5キーでリスト表示するようにしたいのです。
説明不足でどうも申し訳ありませんでした。
やっぱりすごく難しそうですね、この問題は(^^;
横からすいません。
悩んでいるようなので、以下の方法ではと思い書込みしました。
1.FormのKeyPreviewプロパティを Trueにする。
2.Form_KeyDownに以下のコードを入力する。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 116 Then
' 入力を[F5] -> [F4]キーに変更
KeyCode = 115
ElseIf KeyCode = 115 Then
' [F4]キーを無視する
KeyCode = 0
End If
End Sub
3.実行して確認。
F4キーを他で使いたいなら条件付けで回避して下さい。
自分の環境では問題なく動作しました。
これでは駄目でしょうか。
すいません、修正です。
キーコードの確認に 115、116 を使わずに、
vbKeyF4、vbKeyF5 を使った方が良かったですね。
その方があとから見やすいですから。
わー!できました!!(^o^)
うちさん、大変レスが遅れてしまいましたが、
思い通りの結果を得られることができました。
ご回答ありがとうございました。
ツイート | ![]() |