• ベストアンサー

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

  • npupu
  • お礼率68% (41/60)

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

  • ベストアンサー
  • 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

  • 実行時追加したコントロールの識別

    VB2008を使用しています。 プログラム実行中に追加したコントロールをどのように識別すればいいのかがわからなくて困っています。 例えば以下のようにすると、 itemsが1と2のコンボボックスが10個できますが、 すべてNewComboBoxという名前のコントロールのため、 最終的にそれぞれ1か2どちらを選択したかを知りたいときに、 10個のコントロールをどのように識別すればよいかわかりません。 Dim NewComboBox As ComboBox = New ComboBox() For i = 1 To 10 NewComboBox = New ComboBox() NewComboBox.Items.Add(1) NewComboBox.Items.Add(2) NewComboBox.Location = New Point(5, 5 + (24 * (i - 1))) Me.Controls.Add(NewComboBox) Next 説明が不明瞭であるかもしれませんが、 お分かりの方いらっしゃいましたら、ご回答願います。

  • vb2008 コントロール配列

    VB6からVB2008へ移行を検討しているものです。 そこで質問なんですが、VB2008でコントロールの反復処理はどう処理すればいいのでしょうか? VB6の時はコントロール配列を使用して、ForNextで繰り返せばそれらしいことはできました。VB2008はコントロール配列がサポートされていないのでどうすればいいかわかりません。みなさんはどう反復処理を行っているのか教えていただきたいと思います。 具体的な処理として、テキストボックス1~10があり、そのテキストボックスの内容を1~10の順番で、テキストボックス11~20に格納する。以上、宜しくお願いします。

  • キューとコンボボックスの使い方  VB2008

    VB2008を使っています。 キューとコンボボックスの使い方がわからないのですが、以下のソースで (1)キューとデータソースを使う。 Dim queue As Queue = New Queue(20) For i As Integer = 0 to 9 queue.Enqueue( i.ToString() ) Next i ComboBox1.DataSource = queue.ToArray ComboBox2.DataSource = queue.ToArray (2)べたな方法 ComboBox1.Items.Clear() For i As Integer = 0 to 9 ComboBox1.Items.Add( i.ToString() ) Next i ComboBox2.Items.Clear() For i As Integer = 0 to 9 ComboBox2.Items.Add( i.ToString() ) Next i ------------------------ (1) (1)と(2)は厳密にどのように違うのでしょうか? (2) (1)で心配なのは、キューの上限を20にしていて、実際使っているのは10個で後は空です。 この状態で、コンボボックスのDataSourceにセットした場合、(2)と同じように10件だけになっているのでしょうか? (3) (1)は同じキューを使いまわしています。コンボボックス1と2は独立して使えるのでしょうか?(データは同じです。)

  • コントロールが配列かどうかを知るには?

    Visual Basic6.0(SP5)で伺いたいことがあります。 フォーム上の全てのオブジェクトを For Each文で取得しています。以下の様にです。 Dim Control As Object For Each Control In Form1.Controls If TypeOf Control Is Text Then End If Next Control このとき個々のControlがコントロール配列かどうかを知りたいのですが、どうすればよろしいでしょうか?フォーム上にはコントロール配列のオブジェクトも、コントロール配列ではないオブジェクトもあります。 Control.Indexの値を参照しようとしても、コントロール配列でない場合は 「配列ではないオブジェクトです」とエラーになります。 IsArray関数でもFalseになってしまいます。 何を行いたいかというと、そのControlがコントロール配列(Text1(0)とかText1(1)とか)かどうかを調べて、そのIndexをある関数の引数にしたいのです。全てコントロール配列だったら、Control.Indexで値を取得できるのですが。 よろしくお願いします。

  • VB.NETで、配列をテーブルに変換する。

    VB.NETで、一次元配列string()にあるデータを、DataTableに変換 したいのですが、「型'String'の値を'System,Data,DataTable'に変換できません。」 と、エラーが発生してしまいます。 s1に、配列データが入っています。 Dim dt As DataTable Dim cnt As Integer Dim i As Integer dt = New DataTable count = s1.Length For i = 0 To cnt - 1 dt = CType(s1(i), DataTable) Next 解決方法が見つからず、行き詰っております。 宜しくお願い致します。

  • VB2005 コントロール配列について教えていただけませんか?

    現在VB2005を用いてプログラムを行なっている初心者です。 ここのサイトでVB2005ではコントロール配列は使用できないことを知りました。そこで、例えばフォーム上にTextBoxを5個配置して、各TextBoxに入力された値を配列に格納するのにはどのようにすれば良いでしょうか? data(0) = textbox1.text data(1) = textbox2.textと一つずつやるしかないでしょうか・・・ For文などを用いて簡単にできる方法を教えてください。 よろしくお願い致します。

  • VB2010でのコントロール多次元配列について

    教えてください。 実行中にコントロールを生成したいのですが、 Public Class Form1  Private myTxt(,) As System.Windows.Forms.TextBox  Me.myTxt = New System.Windows.Forms.TextBox(59, 2) {}  Dim i As Integer  Dim j As Integer  Dim h As Integer  Dim p As Integer  h = 10  p = 100  For i = 0 To Me.myTxt.GetLength(0) - 1   For j = 0 To Me.myTxt.GetLength(1) - 1    Me.myTxt(i, j) = New System.Windows.Forms.TextBox    Me.myTxt(i, j).Name = "myTxt" + i.ToString() + j.ToString()    Me.myTxt(i, j).Size = New Size(100, 30)    Me.myTxt(i, j).Location = New Point(p, h)    p = p + 100   Next j   h = h + 30  Next i  Me.myPnl.Controls.AddRange(Me.myTxt) と書くと最後の行が波線になり、 “型 'System.Windows.Forms.TextBox の 2 次元配列' の値を 'System.Windows.Forms.Control' に変換できません。”とエラーになります。 これはAddRangeは多次元配列に使用できないということなのでしょうか? 色々検索してみましたが、コントロールの生成に関する多次元配列が見つけられずに 困っていました。 最後のAddRange(Me.myTxt)をAdd(Me.myTxt(i,j))などと変えたりしても別のエラーになり、 基本的に間違っている気がしますがどこだかがわかりません。 詳しい方、宜しくお願い致します。

  • 【VB2005】コントロールを配列に。

    下記のコードを変更して、コントロールの値を配列に代入して、 その値をもとに、ボタンを複製して追加したいと思っています。 Public Class frmStart Dim btnNewButton1 As New Button Private Sub frmStart_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load NewButton1.Text = "処理1" btnNewButton1.ForeColor = Color.DimGray btnNewButton1.Location = New Point(10, 100) btnNewButton1.Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton1) end sub End Class やりたいことは、Dim btnNewButton() As New Button のようにデータを配列にして、 btnNewButton(0).ForeColor = Color.DimGray btnNewButton(0).Location = New Point(10, 100) btnNewButton(0).Size = New Size(180, 30) btnNewButton(1).ForeColor = Color.DimGray btnNewButton(1).Location = New Point(380, 100) btnNewButton(1).Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton(0))     Me.Controls.Add(btnNewButton(1)) という事をしたいのですが、方法が解らなくて困ってます。 お知恵を貸してください。

  • VB.Netのテキストボックスのコントロール

    VB2010を使用しています。チェックボックスのon/offでテキストボックスの入力を制限しようとしています。 If Check1.Checked = True Then For Each Cont As Control In Me.Groupko顧客数.Controls If Cont.Name Like "Text*" Then ここの記述ですが         『Cont.ReadOnly = True』と書いても構文が違うのか認識しません?? End If Next Else           逆のコードの予定 End If 大量のテキストボックスがあるので一つ一つコードを書くのは面倒なので ご教授お願いします。

  • コントロール配列と同じような扱い方

    TextBox1、TextBox2、TextBox3・・・・TextBox10 と10個のテキストボックスにVB6で使っていたコントロール配列と同じような処理の仕方をコードで教えていただけませんか。 for i=0 to 9 TextBox(i).Text=i next i 上記のコードをVB.NETで書くとすれば、どのように書けばいいかということさえわかれば、なんとか頑張れる気がします。

専門家に質問してみよう