• ベストアンサー

VB2005でのコントロール配列?

お世話になってます。 私はVB入門者です。 使用している用語などに間違いなどがありましたら ツッコんでやって下さい。 VB2005にて、フォーム内にcomboboxが10個あります。 Load時にT_boxの1~10に同じ、配列case_T を代入したいのですが 下記のコードをどのように直せばよいのでしょうか。 VB6まではコントロール配列?というものが、あったようですが 今回求めている処理はそのコントロール配列に該当するのでしょうか? -------------------------------- case_T内の値は 動的な値A,b,c,d,e,f,gがはいっていて それをT_boxの1~10に格納したいです -------------------------------- Dim T_box() As ComboBox = {T_box1, T_box2, T_box3, T_box4, T_box5, T_box6, T_box7, T_box8, T_box9, T_box10} Dim m As Short ReDim T_box(T_box.Length - 1) For n = 0 To T_box.Length - 1 T_box(cont + 1).Items.Clear() For m = 0 To case_T.Length - 1 T_box(cont + 1).Items.Add(case_T(cont)) cont += 1 Next Next T_box1.ResetText() cont = 0 End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

配列caseTが単純な1次元配列なら for n as integer = 0 to T_Box.Length -1   T_Box(n).Items.AddRange( caseT ) next でデータをセットできますよ

npupu
質問者

お礼

いつもありがとうございます! 色々と試してみましたが下記のエラーが出てしまいます。 "NullReferenceException" redfox63さんに書いて頂いたものだけではエラーが出たので 私なりに試行錯誤しこうなりましたがダメでした。 For n As Integer = 0 To T_box.Length - 1 ReDim Preserve T_box(T_box.Length - 1) T_box(n).Items.AddRange(case_T(n)) Next 再度アドバイス下さい。

npupu
質問者

補足

ありがとうございました。 宣言を処理を行うLoad時にて行いましたところ うまくいきました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

試しに以下のようなコードを作成して実行してみましたが、問題なく動作しています。 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cmboxs() As ComboBox = {ComboBox1} Dim values() As String = {"aaa", "bbb", "ccc"} For i As Integer = 0 To cmboxs.Length - 1 cmboxs(i).Items.AddRange(values) Next End Sub 多分No1さんの提示してくれたコードの場所以外の問題と思われます。

npupu
質問者

お礼

わざわざありがとうございます。 ご指摘の通り、コードの場所以外に問題がありました。 お二方のコードと見比べたところ、私のコードは 処理前にcombobox内が「nothing」になっておりました。 今回、掲載した処理はLoad時にComboBoxに値を代入するのですが 宣言をLoad時に行っておらず 最上段部にて行っていたのですが それが原因のようでした。 今まで最上段にて宣言を行っているのが最優先だと思っていたのですが勘違いなのですね?

すると、全ての回答が全文表示されます。

関連するQ&A