- PR -

ComboBox不具合?

1
投稿者投稿内容
スー
会議室デビュー日: 2005/04/28
投稿数: 2
投稿日時: 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で、わけあって変更できません。
よろしくお願いします。
karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2005-04-29 01:02
確認したら、DataSourceでアイテムを設定した場合、確かにそのようになりますね。
Items.Addで1つずつアイテムを追加した場合は、-1は保持されてますが。
根本的な解決策にはなりませんが、とりあえずの対処として、現在のインデックスを保存して、タブページが変更されて自分のページに戻ってきたときに保存したインデックスを再度設定してあげる、とか。
何でそんなことしなきゃならないんだ、とは思いますが。
連休は暇だから、もうちょっと調べてみようかな。
nicima
会議室デビュー日: 2005/01/14
投稿数: 5
投稿日時: 2005-04-29 08:54
情報が古いかもしれませんが、マイクロソフトのサポート情報にあげられています。
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B820633

要約すると、その動作は仕様ということらしいです。
おそらく問題はBindingContextChangedのイベントなので、
OnBindingContextChangedを(SelectedIndexが-1の時はイベントがおきないように)
オーバーライドするコントロールを作るとか、
先にkarajanさんが説明されている方法をとるとかになると思います。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-04-29 14:14
引用:

情報が古いかもしれませんが、マイクロソフトのサポート情報にあげられています。
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B820633



一応、参考までに、自動翻訳した日本語の情報です。
http://support.microsoft.com/default.aspx?scid=kb%3Bjp-jp%3B820633

スー
会議室デビュー日: 2005/04/28
投稿数: 2
投稿日時: 2005-04-29 14:44
質問者です。
ComboBoxを継承したコントロールを作成し、OnBindingContextChangedを
オーバーライドしてSelectedIndexが-1の時はイベントがおきないように
する方法にて解決しました。

みなさん、どうもありがとうございました。
これで連休休めます。たすかりました。
1

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