コンボボックスのF4キーによるドロップダウンリストの表示をしなくするには?

解決


だー  2002-05-27 18:00:59  No: 75641  IP: [192.*.*.*]

コンボボックス(Styleプロパティ=0)にフォーカスが存在する時に、
F4キーを押すとドロップダウンリストが表示されると思うのですが、
それを表示しないようにするにはどうしたらよいでしょうか?

編集 削除
たかみちえ  URL  2002-05-27 21:16:32  No: 75642  IP: [192.*.*.*]

コンボボックスなら、keybd_eventとかでEscキーを押させたら閉じないですか?

編集 削除
だー  2002-05-27 21:42:42  No: 75643  IP: [192.*.*.*]

ご回答ありがとうございました。
早速試してみたのですが、閉じることはできるのですが、
一瞬リストが表示されてしまいます。
それを全く表示しないようにしたいのですが、できないでしょうかね?

編集 削除
Say  2002-05-28 10:24:43  No: 75644  IP: [192.*.*.*]

おすすめではありませんが、
フックしてキーを殺すとか

編集 削除
だー  2002-05-28 15:23:57  No: 75645  IP: [192.*.*.*]

Sayさん、ご回答ありがとうございました。

例の画面には、入力項目がたくさんあるので、
フックは使えないですよね。。。
うーん、やはり実現は難しいのでしょうか。。。

編集 削除
Say  2002-05-28 16:39:26  No: 75646  IP: [192.*.*.*]

>例の画面には、入力項目がたくさんあるので、
>フックは使えないですよね。。。

殺したいキー以外は何もせず戻してやれば
いいだけでは?

編集 削除
だー  2002-05-29 11:17:20  No: 75647  IP: [192.*.*.*]

Sayさん、ありがとうございます。

フックに関しては、勉強不足だったようです。
SetWindowLong()などを調べてみましたが、
全然わかっていないなーと我ながら痛感しました。
(説明を読んでもわからないままでした。。。(T_T))
もう少し調べてから、また質問させていただくことになるかもしれません。

ただ、F4キーは他の動作をするようにしたいため、
F4キー自体を殺してしまうことはおそらくできないでしょうね。

編集 削除
たかみちえ  URL  2002-05-29 12:22:13  No: 75648  IP: [192.*.*.*]

いくつか方法を思いつきました。いずれも使えるかどうか…^^;
1.EnabledをFalseにする。
  たしかにドロップダウンしませんけど、当然選択もできません^^;

2.コンボボックスもどきのユーザーコントロールを作ってしまう。
  十字キー(というのかな?)で項目はかえられるけど、ドロップダウンしない…というのなら、
リストボックスをユーザーコントロールにおいて、一項目しか見えないようにして、
上下にDrawEdgeで枠を描いて、右端にある矢印のついたボタンを描けば、
とりあえずできると思います。
  あとは、一行テキストボックスにボタンを描いて、矢印キーが押されたら、内容を書き換えて文章を選択させる…とか。

3.F4の直後にEscを押して閉じるようにするとして、そのあいだドロップダウンリストが出る部分をどうにかして隠す。
  うまく隠さないと、かえって不自然かも…。


  どうでしょうか?2はちょっといいんじゃないかなと思います。実装までが面倒ですけど…。
一行テキストボックスに…。というのは、わりと難しくはないような…。
(ドロップダウンリストとして使ってるなら、ちょっと難しそうですけど)

編集 削除
だー  2002-05-30 19:50:41  No: 75649  IP: [192.*.*.*]

たかみちえさん、いろいろ考えてくださってようで、
どうもありがとうございました(^-^

が、しかし、コンボのドロップダウン機能は全く不要なのではなく、
右端のドロップダウンのボタンが押されたら、
普通にドロップダウンでリスト表示・選択したいですし、
それにF4キーではリストを表示したくないのですが、
その代わりにF5キーでリスト表示するようにしたいのです。

説明不足でどうも申し訳ありませんでした。

やっぱりすごく難しそうですね、この問題は(^^;

編集 削除
うち  2002-05-31 09:35:51  No: 75650  IP: [192.*.*.*]

横からすいません。
悩んでいるようなので、以下の方法ではと思い書込みしました。

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キーを他で使いたいなら条件付けで回避して下さい。
自分の環境では問題なく動作しました。
これでは駄目でしょうか。

編集 削除
うち  2002-05-31 09:41:18  No: 75651  IP: [192.*.*.*]

すいません、修正です。
キーコードの確認に 115、116 を使わずに、
vbKeyF4、vbKeyF5 を使った方が良かったですね。
その方があとから見やすいですから。

編集 削除
だー  2002-06-05 09:24:49  No: 75652  IP: [192.*.*.*]

わー!できました!!(^o^)

うちさん、大変レスが遅れてしまいましたが、
思い通りの結果を得られることができました。
ご回答ありがとうございました。

編集 削除