コンボボックスをMe.Controlsを使ってうまく制御できない

解決


やすこ  2009-03-03 05:18:25  No: 141608

初めて書き込ませて頂きます。
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

しかし、上の矢印の位置で、「オブジェクト参照がオブジェクトインスタンスに設定されていません」
という例外が発生しています。
基本的なことが分かっていないようで申し訳ないのですが、いったい何が悪いのでしょうか?
ご回答よろしくお願いいたします。


やすこ  2009-03-03 07:15:15  No: 141609

ゴメンナサイ。上記の原因が分かりました。
上記の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の内容を表示したい。
どうすればよいでしょうか?よろしくお願いいたします。


やすこ  2009-03-03 07:27:55  No: 141610

またまたゴメンナサイ。原因が分かりました。
コンボボックスのDataSourceに設定するDataTableを、いずれも同じものを使ったため、
一つのコンボボックスの内容を変更すると、同じ所を参照をしてしまうため、
他の2つのコンボボックスまで変更されてしまうことが分かりました。
このため、それぞれのコンボボックスのDataSourceに設定するDataTableをCopyしたものを使うようにして解決しました。
お騒がせしました。本当にゴメンナサイ。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加