初めて書き込ませて頂きます。
VB2008で、以下の質問を参考に、複数のコンボボックスをセットしたいと思います。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200902/09020040.txt
作成しているフォームには、Combobox1, Combobox2, Combobox3というコンボボックスが存在し、
以下のようにそれぞれ3つのコンボボックスを処理しようと思っているのですが、
Dim cbo As ComboBox
For i As Integer = 1 To 3
cbo = CType(Me.Controls("Combobox" & CStr(i)), ComboBox)
cbo.Items.Clear() '←ここで例外が発生する
(以下略)
Next
しかし、上の矢印の位置で、「オブジェクト参照がオブジェクトインスタンスに設定されていません」
という例外が発生しています。
基本的なことが分かっていないようで申し訳ないのですが、いったい何が悪いのでしょうか?
ご回答よろしくお願いいたします。
ゴメンナサイ。上記の原因が分かりました。
上記のCombobox1, Combobox2, Combobox3は、GroupBoxコンテナ上にあったので、
このままでは参照ができないことが分かりました。
そこで、以下のように修正したのですが、また問題が発生しました。
Dim cbo As ComboBox
For i As Integer = 1 To 3
cbo = CType(Me.GroupBox.Controls("Combobox" & CStr(i)), ComboBox)
cbo.Items.Clear() '←例外は解消された
(コンボボックスに値を追加する処理)
cbo.SelectedIndex = i - 1
Next
この処理を行うと、Combobox1, Combobox2, Combobox3のいずれもSelectedIndexが2になってしまいます。
(Index = 2の内容が表示されてしまう。)
やりたいことは、以下のとおりなのですが...
・Combobox1は、Index = 0の内容を表示したい。
・Combobox2は、Index = 1の内容を表示したい。
・Combobox3は、Index = 2の内容を表示したい。
どうすればよいでしょうか?よろしくお願いいたします。
またまたゴメンナサイ。原因が分かりました。
コンボボックスのDataSourceに設定するDataTableを、いずれも同じものを使ったため、
一つのコンボボックスの内容を変更すると、同じ所を参照をしてしまうため、
他の2つのコンボボックスまで変更されてしまうことが分かりました。
このため、それぞれのコンボボックスのDataSourceに設定するDataTableをCopyしたものを使うようにして解決しました。
お騒がせしました。本当にゴメンナサイ。
ツイート | ![]() |