- - PR -
ComboBoxで項目を選択したときのSelectedIndex
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-01 13:57
VB.NetのComboBoxについて教えてください。
ComboBoxのItemsに aaa bbb ccc という文字列が入っていたとして、ComboBox.textに「c」を入力してAlt+↓すると textは「ccc」に変わって、ドロップダウンしているリストも「ccc」がハイライトされて いるかと思いますが、この状態でEnterするとSelectedIndexが変わらないまま「ccc」が 選択された状態になってしまうのを回避したいのです。 やりたいのはSelectedIndexChangedのイベントをとってきて「ComboBoxで選ばれている 項目が変わったら、それに対応する値をDBからとってきて他のコントロールにセット」なのですが、 上記のようにキーで操作されるとイベントが発生しないため、ComboBoxの値だけ変わって 他が変わらずに困っています。(項目をマウスで選択されればうまくいきます) DropDownしたときにSelectedIndexに-1を入れたりもしてみたのですがだめでした。 どうしたら良いかご存知でしたら教えてください。 | ||||||||
|
投稿日時: 2006-03-01 14:37
SelectedIndexChanged イベントが発生しない理由ですが、
直接「ccc」と入力した場合と同じ扱いになっているからようですね。 例としてあげた [Alt] + [↓] は「ドロップダウンしてハイライト表示になっているのに」 という意味であげたのだと思いますが、扱いは Text を変えただけになっています。 ですので、Leave イベント時に Item 内を検索して同期を取るか、 TextChanged イベントで同期を取ることになるでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-01 14:54
よくよく考えてみれば DropDownStyle を DropDownList にすべき状況のように思えます。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-01 15:03
じゃんぬねっとさん、コメントありがとうございます。
ちょっとやってみたのですが、TextChangedイベントですと、先の例で私が挙げた Textに「c」と入力した瞬間には発生するのですが、Alt+↓してTextが「ccc」に 変わったときには発生していないようなのです… また運用時にはComboBoxにフォーカスを置いたままで何度かComboBoxの 値を変えるようなオペレーションをすることがあるため、Leaveイベントだと 最後に変更した値でしか反映されないことになるのでだめなのです。 その後自分でも試していて気がついたのですが、Enterキーで項目を確定するタイミングを とってみようと思ってKeyDownイベントを仕掛けたところ、Enterで確定された項目が SelectedIndexでちゃんと反映されているようなのです。
としてみると、SelectedIndexが変わっていました。 なのにChangedイベントが起きないというのが不思議なのですが、こういうものなのでしょうか…? |
1