- PR -

ComboBoxで項目を選択したときのSelectedIndex

1
投稿者投稿内容
さくら
常連さん
会議室デビュー日: 2005/09/12
投稿数: 31
投稿日時: 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を入れたりもしてみたのですがだめでした。
どうしたら良いかご存知でしたら教えてください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-01 14:37
SelectedIndexChanged イベントが発生しない理由ですが、
直接「ccc」と入力した場合と同じ扱いになっているからようですね。

例としてあげた [Alt] + [↓] は「ドロップダウンしてハイライト表示になっているのに」
という意味であげたのだと思いますが、扱いは Text を変えただけになっています。

ですので、Leave イベント時に Item 内を検索して同期を取るか、
TextChanged イベントで同期を取ることになるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-01 14:54
よくよく考えてみれば DropDownStyle を DropDownList にすべき状況のように思えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さくら
常連さん
会議室デビュー日: 2005/09/12
投稿数: 31
投稿日時: 2006-03-01 15:03
じゃんぬねっとさん、コメントありがとうございます。

引用:

ですので、Leave イベント時に Item 内を検索して同期を取るか、
TextChanged イベントで同期を取ることになるでしょう。



ちょっとやってみたのですが、TextChangedイベントですと、先の例で私が挙げた
Textに「c」と入力した瞬間には発生するのですが、Alt+↓してTextが「ccc」に
変わったときには発生していないようなのです…
また運用時にはComboBoxにフォーカスを置いたままで何度かComboBoxの
値を変えるようなオペレーションをすることがあるため、Leaveイベントだと
最後に変更した値でしか反映されないことになるのでだめなのです。

その後自分でも試していて気がついたのですが、Enterキーで項目を確定するタイミングを
とってみようと思ってKeyDownイベントを仕掛けたところ、Enterで確定された項目が
SelectedIndexでちゃんと反映されているようなのです。
コード:
Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
	If e.KeyCode = Keys.Enter Then
		Label1.Text = ComboBox1.SelectedIndex
	End If
End Sub


としてみると、SelectedIndexが変わっていました。
なのにChangedイベントが起きないというのが不思議なのですが、こういうものなのでしょうか…?
1

スキルアップ/キャリアアップ(JOB@IT)