none
ComboBox のリストを開いた時、任意の位置から表示させたい RRS feed

  • 質問

  • 毎々お世話になります。

    Visual Studio 2005 Enterprise Edition で Visual Basic による開発を行っています。

    ComboBox から時刻を選択させようとしており、
    ""
    "00"
    "01"
    "02"
     :
    "21"
    "22"
    "23"

    の25行を与えているのですが、
    この ComboBox のリストを開かれた際、時刻未指定の場合は11行目(→"09")から表示させたいのです。

    以前VB6で、VsFlexGrid で表示先頭行の指定ができたような記憶があるのですが、
    ComboBox のプロパティでは該当する項目が見当たりません。

    ご存知の方、よろしくお願いします。

    2010年4月23日 2:50

すべての返信

  • DropDown イベントで、SelectedIndex を調べて該当してれば設定する、って感じで良いんじゃないですかね。

    // でも正直直感に反する動きだなぁ。

    2010年4月23日 3:17
  • ComboBoxのSelectedValueプロパティに値をセットしても良いです。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月23日 4:11
    モデレータ
  • Honqlianqさん、trapemiyaさん

    回答ありがとうございます。

    このSelected~にセットしてしまうと、リスト行の"09"が既に選択されている状態になってしまいます。

    また、リストを開いただけで、何も選ばずに閉じた場合は未選択状態に戻さなければなりません。

    未選択状態のままリストの表示範囲を任意に指定する方法を知りたかったんです。

     

    私の説明が不足していたようで、申し訳ありませんでした。

    2010年4月23日 6:19
  • なるほど。

    .NET/WinForm の ComboBox ではプロパティとして提供されていませんが、コモンコントロールレベルまで降りると、CB_SETTOPINDEX メッセージが存在しています。これを SendMessage で送信してやれば先頭インデックスを指定できます。

    ただし、このメッセージはドロップダウン完了後でないと有効ではないようです。つまり、アプリケーションやコントロールの初期化時、あるいは DropDown イベント内で送信しても無視されます。あくまで DropDown イベントが完了した後。なので、DropDown 内で、BeginInvoke やタイマを使ってメッセージ送信を遅延させる必要があります。
    2010年4月23日 7:10
  • ComboBoxのアイテムを単に"09"~"23"にしたいということでしょうか? であれば、Comboboxにバインドするデータソースで絞り込んでしまうのが簡単だと思います。データソースを何で実現するかにもよると思いますが、一例としてDataTableであれば、FilterやLinqなどで絞り込めます。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月23日 13:48
    モデレータ
  • ComboBoxのアイテムを単に"09"~"23"にしたいということでしょうか?

    おそらく違うと思います。
    私は以下のようなことをしたいと読み取っています。

    ・空の文字列と 00 ~ 23 を候補として表示する。
    ・ドロップダウンを開いた段階で一番上に表示されるのが 09 としたい。(スクロールした状態)
    ・ただし、ドロップダウンを開いて閉じただけでは、09 を選択状態にしたくない。(SelectedIndex = -1 に戻るイメージ)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年4月23日 15:08
    モデレータ
  • あ~、なるほど。そういうことでしたか。ようやく理解いたしました。COMBOBOXINFOのhwndListあたりで取得でしょうか。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月25日 16:07
    モデレータ