- - PR -
ComboBox不具合?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-28 21:19
Windowsアプリケーションで、TabControl上に配置したComboBoxのSelectedIndexが勝手に変わってしまう現象に困っています。(-1から0)
1.まずFormにTabControlをはりつけTabPageを2つ追加します。 2.1つ目のTabPage上にComboBoxをはりつけます。 3.Form_LoadイベントでDataTableを作成し、ComboBoxに関連付けます。 ComboBox1.DataSource = dt 'DataTable ComboBox1.ValueMember = "Code" 'Column ComboBox1.DisplayMember = "Name" 'Column 4.プログラムを実行しTabPage1上のComboBoxのSelectedIndexを-1にします。 (Deleteキーで未選択の状態にする) 5.マウスクリックによりTabPage2を選択後、TabPage1に戻ると、 ComboBoxのSelectedIndexが0になってしまいます。 このときTextChanged,SelectedIndexChanged,SelectedValueChanged,SelectionChangeCommitted イベントは発生せずにSelectedIndexのみ-1→0になってしまいます。 ComboBoxの表示内容もIndex=0の内容が表示されます。 TabPageを変更してもどってきてもSelectedIndex=-1のままにしたいのですが なにか回避策はあるでしょうか? DropDownStyleはDropDownで、わけあって変更できません。 よろしくお願いします。 | ||||
|
投稿日時: 2005-04-29 01:02
確認したら、DataSourceでアイテムを設定した場合、確かにそのようになりますね。
Items.Addで1つずつアイテムを追加した場合は、-1は保持されてますが。 根本的な解決策にはなりませんが、とりあえずの対処として、現在のインデックスを保存して、タブページが変更されて自分のページに戻ってきたときに保存したインデックスを再度設定してあげる、とか。 何でそんなことしなきゃならないんだ、とは思いますが。 連休は暇だから、もうちょっと調べてみようかな。 | ||||
|
投稿日時: 2005-04-29 08:54
情報が古いかもしれませんが、マイクロソフトのサポート情報にあげられています。
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B820633 要約すると、その動作は仕様ということらしいです。 おそらく問題はBindingContextChangedのイベントなので、 OnBindingContextChangedを(SelectedIndexが-1の時はイベントがおきないように) オーバーライドするコントロールを作るとか、 先にkarajanさんが説明されている方法をとるとかになると思います。 | ||||
|
投稿日時: 2005-04-29 14:14
一応、参考までに、自動翻訳した日本語の情報です。 http://support.microsoft.com/default.aspx?scid=kb%3Bjp-jp%3B820633 | ||||
|
投稿日時: 2005-04-29 14:44
質問者です。
ComboBoxを継承したコントロールを作成し、OnBindingContextChangedを オーバーライドしてSelectedIndexが-1の時はイベントがおきないように する方法にて解決しました。 みなさん、どうもありがとうございました。 これで連休休めます。たすかりました。 |
1