- PR -

ComboBox で SelectedIndex/SelectedValue が変わらない

投稿者投稿内容
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2006-04-26 07:20
.Net Framework 2.0 にて開発しています(C#)

複数の国から1つの国を選択するコンボボックスを作成しようとしています。

コンボボックスをデータセットにバインドし、
ValueMember に国ID(int)を、
DisplayMember に国名(varchar)を、
それぞれ設定しました。

通常の方法でマウスで国を選択した場合、
コンボボックスの SelectedValueChanged イベントを拾い、
そこでコンボボックスの SelectedValue プロパティを参照することにより
選択された国IDが取得できます。

しかし、以下の手順で国を選択すると、SelectedValue が変更されません。
(SelectedValueChanged イベントが発生しません)

1.国の頭文字として "j" を入力
2.F4キーを入力し、ドロップダウンさせる
3.JAMAICA が反転されるのでそのままタブキーで次のコントロールへ

SelectedIndex に関しても同様、変わりません。

3で↓キーを押して JAPAN を選択すると SelectedValue は変更されます。
しかし何も押さずに JAMAICA のままタブキーやエンターキーを押した場合、
SelectedValue は変更されません。

このようなケースでも JAMAICA の国IDを取得しなくてはいけないのですが、
どのような方法が考えられますでしょうか?
もしくは私は根本的に何か間違ったことをしているのでしょうか?
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2006-04-26 08:00
自己レスです。

まず訂正ですが、SelectedValue は投稿下部の手順でも変更されていました。
しかし SelectedValueChanged イベントはやはり発生しないようです。

SelectedValue が変更されるにもかかわらず、
SelectedValueChanged イベントが発生しないというのは
バグなのではないかと思いますが、
とりあえずの対応として、Leave イベントを利用して
コンボボックスからフォーカスが離れる際に
SelectedValue を取得するようにしました。

皆さんはこの問題に遭遇したことはありますか?
その際の対応方法などありましたら教えてください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-26 08:00
引用:

Shinさんの書き込み (2006-04-26 07:20) より:

しかし、以下の手順で国を選択すると、SelectedValue が変更されません。
SelectedIndex に関しても同様、変わりません。


試したのですが、普通に変わりました。

引用:

このようなケースでも JAMAICA の国IDを取得しなくてはいけないのですが、
どのような方法が考えられますでしょうか?
もしくは私は根本的に何か間違ったことをしているのでしょうか?


とりあえず、上記方法では Selected ~ 関連のイベントは発生しませんでしたが、

コード:

    Console.WriteLine(Me.ComboBox1.SelectedIndex)
    Console.WriteLine(Me.ComboBox1.SelectedValue)


としたところ、期待通りの値が出力されました。

ですので、"どのような方法が考えられますでしょうか?" に対しては、
私と Shin さんの結果の「揺らぎ」が明らかになってからお答えした方が良いと考えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-26 08:07
引用:

Shinさんの書き込み (2006-04-26 08:00) より:

まず訂正ですが、SelectedValue は投稿下部の手順でも変更されていました。


入れ違いでしたね。(^^)

引用:

皆さんはこの問題に遭遇したことはありますか?
その際の対応方法などありましたら教えてください。


通常、ComboBox を使う時は DropDownList スタイルを使用するので遭遇したことはなかったり...
どのみち、SelectedIndexChanged などで "確定" する場合はないので、遭遇しないでしょうね。

即時反映させたいという意味では Key イベントを拾うしかないでしょうね。
私なら、そういうカスタム コントロールを作ると思います。

# 今回の場合、プロパティの Selected ~ が変更されるのは Leave 時なのでしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2006-04-26 08:24
じゃんぬねっとさん、レスありがとうございます。

私もキーボード操作などは今まで意識したことがなかったので
DropDownList スタイルで作れたら楽だったのですが、
エンドユーザはキーボード入力派が多いようなのです。

「SelectedValueChanged イベントが SelectedValue の変更を拾わない」
というこの根本的におかしい現象については、
バグ修正もしくはイベント名の再考が必要な気がしますので
フィードバックセンターのようなところがあればそこにポストしてみます。

今回は とりあえず Leave イベントで様子を見て、
それでだめそうなら KeyPress イベントなどを拾って対応してみようと思います。
ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-26 08:42
引用:

Shinさんの書き込み (2006-04-26 08:24) より:

「SelectedValueChanged イベントが SelectedValue の変更を拾わない」
というこの根本的におかしい現象については、
バグ修正もしくはイベント名の再考が必要な気がしますので
フィードバックセンターのようなところがあればそこにポストしてみます。


今回の場合は Product Feedback Center ではなく、
MSDN フォーラムのフィードバックを利用してください。

  Visual Studio フィードバック

「これは自然ではないように思えます」と書くと良いでしょう。

# 既出っぽい、フィードバックではありますが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-26 22:54
この辺かなぁ?
DropDownList Style combobox does not update binding source when value changed via keyboard.
再現手順を見ると、これが近いかも?
Combobox.SelectedValue returns incorrect value

"SelectedValue combobox" を、"All Products" で検索
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-04-27 00:40
とくにどうということではないのですが、これは、
「ComboBoxで項目を選択したときのSelectedIndex」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28882&forum=7
と、類似する話題ですよね。違うかな?
私はあまり .NET の GUI のことは分からないのですが、根源は同じなのでしょうか。

また、Windows は大昔(Windows 3.0 の頃)から Windows API (32ビットなら Win32 API) が、コンボボックスの API を持っていましたよね(これも記憶があいまい)。この API レベルですでにこういう問題があるのか、それとも .NET でラップした部分での問題なのかが気になります。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}

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