- - PR -
ComboBox上のSelectedIndex処理について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-17 17:50
こんにちは。
コンボでデータを選択した後、ボタンクリックでコンボを空欄にするプログラムです。 ※のコマンド行で空欄になるように設定していますが、 ComboBox1.SelectedIndex = 0 と認識され、データの1行目が表示されてしまいます。 ※のコマンドを2回書いて実行すれば、正常に動くのですが・・・。 原因がわかりません。どなたかご教授ください。 ↓Form1_Load Connection.ConnectionString = "database=VBHanbai;server=XXX;User ID =XX ;Password =XX " Connection.Open() Command = Connection.CreateCommand Command.CommandText = "SELECT * FROM Syouhin" Adapter.SelectCommand = Command Adapter.Fill(Dset, "Syouhin") Connection.Close() ComboBox1.DataSource = Dset.Tables("Syouhin") ComboBox1.DisplayMember = "SyohinName" ComboBox1.SelectedIndex = -1 ↓Button1_Click ComboBox1.SelectedIndex = -1 ※ |
|
投稿日時: 2005-08-17 18:08
さかもとと申します。
SQLで取得した結果に対し,1行目に空白行が無いのが原因だと思います。 (Index=-1に値が無いから?) >※のコマンドを2回書いて実行すれば、正常に動くのですが・・・。 は試してないので分かりませんが,先ずは先頭に空白行を入れてみてはどうでしょうか? |
|
投稿日時: 2005-08-17 19:56
試してないですが、 ComboBox1.Text = "" じゃ駄目なんでしょうか?
|
|
投稿日時: 2005-08-18 09:43
DataSource 使ってる場合は、SelectedIndex = -1 はダメだったような気がします。
空白のアイテムを自分で追加しないとダメだったような...? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2005-08-18 10:28
言い遅れました
Combobox1はドロップダウンリストなので、Text=""は使えなかったのです。 SelectedIndex=-1の動きを調べていると、 一番目の項目が選択されているときはSelectedIndex=−1をちゃんと認識しているのですが、 それ以外の項目が選択されているとSelectedIndex=0と認識しているようです。 動きは分かっているので対処法は分かるのですが、 なぜこのような動きをするのかがわかりません。 |
|
投稿日時: 2005-08-18 13:11
興味があったのでCLR Profilerで追いかけてみました。
どうやら、ComboBoxのCurrencyManagerが影響しているようです。 ComboBoxにDataSourceを設定したときの挙動として、 ComboBoxはSelectedIndexプロパティの値が変更されると、 CurrencyManagerのPositionプロパティの値を同値に変更しようとします。 また、CurrencyManagerはPositionプロパティの値が変更されると、 ComboBoxのSelectedIndexプロパティの値を同値に変更しようとします。 よって、基本的にCurrencyManagerのPositionプロパティの値は、 ComboBoxのSelectedIndexと同値になりますが SelectedIndexが-1のときは、CurrencyManagerのPositionは0になります。 この仕様により、 ・ComboBoxのSelectedIndexが1以上のときに、SelectedIndexを-1に設定すると →ComboBoxがCurrencyManagerのPositionをSelectedIndexと同値の-1に設定しようとする。 →CurrencyManagerはPositionを0に補正して設定する。 →CurrencyManagerはPositionが変更されたのでComboBoxのSelectedIndexを同値に設定する。 →よって、ComboBoxのSelectedIndexが0に設定される。 ・ComboBoxのSelectedIndexが0のときに、SelectedIndexを-1に設定すると、、 →ComboBoxがCurrencyManagerのPositionをSelectedIndexと同値の-1に設定しようとする。 →CurrencyManagerはPositionを0に補正して設定する。 →CurrencyManagerのPositionは変更されていないのでComboBoxのSelectedIndexは設定しない。 →よって、ComboBoxのSelectedIndexが-1に設定される。 細かい部分の動作は端折っていますが、おそらくこんな感じだと思います。 【追記】 ちょっと、間違えたみたいなので訂正します。 CurrencyManagerのPositionプロパティの値が変更されたときに ComboBoxのSelectedIndexプロパティの値を同値に変更するのは、 CurrencyManagerではなくComboBox自身のようです。 [ メッセージ編集済み 編集者: 壱丸3 編集日時 2005-08-18 13:59 ] |
|
投稿日時: 2005-08-18 16:11
MSのKBにありました。バグだそうです。
[BUG] SelectedIndex を -1 に設定したときにコンボ ボックスがクリアされない http://support.microsoft.com/kb/327244 |
|
投稿日時: 2005-08-18 19:19
原因を教えていただきありがとうございました。
まさか .netのバグだとは想像もしていませんでしたが お陰ですっきりしました。 |
1