- - PR -
ComboBox で SelectedIndex/SelectedValue が変わらない
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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を取得しなくてはいけないのですが、 どのような方法が考えられますでしょうか? もしくは私は根本的に何か間違ったことをしているのでしょうか? | ||||||||||||
|
投稿日時: 2006-04-26 08:00
自己レスです。
まず訂正ですが、SelectedValue は投稿下部の手順でも変更されていました。 しかし SelectedValueChanged イベントはやはり発生しないようです。 SelectedValue が変更されるにもかかわらず、 SelectedValueChanged イベントが発生しないというのは バグなのではないかと思いますが、 とりあえずの対応として、Leave イベントを利用して コンボボックスからフォーカスが離れる際に SelectedValue を取得するようにしました。 皆さんはこの問題に遭遇したことはありますか? その際の対応方法などありましたら教えてください。 | ||||||||||||
|
投稿日時: 2006-04-26 08:00
試したのですが、普通に変わりました。
とりあえず、上記方法では Selected ~ 関連のイベントは発生しませんでしたが、
としたところ、期待通りの値が出力されました。 ですので、"どのような方法が考えられますでしょうか?" に対しては、 私と Shin さんの結果の「揺らぎ」が明らかになってからお答えした方が良いと考えます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-04-26 08:07
入れ違いでしたね。(^^)
通常、ComboBox を使う時は DropDownList スタイルを使用するので遭遇したことはなかったり... どのみち、SelectedIndexChanged などで "確定" する場合はないので、遭遇しないでしょうね。 即時反映させたいという意味では Key イベントを拾うしかないでしょうね。 私なら、そういうカスタム コントロールを作ると思います。 # 今回の場合、プロパティの Selected ~ が変更されるのは Leave 時なのでしょうね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-04-26 08:24
じゃんぬねっとさん、レスありがとうございます。
私もキーボード操作などは今まで意識したことがなかったので DropDownList スタイルで作れたら楽だったのですが、 エンドユーザはキーボード入力派が多いようなのです。 「SelectedValueChanged イベントが SelectedValue の変更を拾わない」 というこの根本的におかしい現象については、 バグ修正もしくはイベント名の再考が必要な気がしますので フィードバックセンターのようなところがあればそこにポストしてみます。 今回は とりあえず Leave イベントで様子を見て、 それでだめそうなら KeyPress イベントなどを拾って対応してみようと思います。 ありがとうございました。 | ||||||||||||
|
投稿日時: 2006-04-26 08:42
今回の場合は Product Feedback Center ではなく、 MSDN フォーラムのフィードバックを利用してください。 Visual Studio フィードバック 「これは自然ではないように思えます」と書くと良いでしょう。 # 既出っぽい、フィードバックではありますが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 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" で検索 | ||||||||||||
|
投稿日時: 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} |