Tree Menu

VB.NETコントロールの配列を作成する

コントロールの配列を作成するには、配列を定義し、それらをインスタンス化してフォームに追加する必要があります。

まず、コントロールの配列を、プライベートなメンバとして定義しておきます。この配列をインスタンス化して、フォームへ追加するだけで配置されます。追加する際に、初期化しておきたいプロパティなどの設定も忘れずに行ってください。

また、この時イベント ハンドラの統合もできます。統合されたイベントでは、sender 引数を利用してイベントが起きたコントロールを特定できます。

当たり前ですが、これらの作業はフォームが表示される前に行うことが多いと思います。以下の例は Form が Load された時に、動的にコントロールの配列を作成しフォームに追加します。ついでに、イベント ハンドラの統合の一例も行っています。

サンプルコード

以下にサンプルコードを示します。

VB.NET 全般
' プライベートなフィールドとして配列を定義する
Private MyTextBoxes As TextBox()

' Load イベントで配列を動的に作成してフォームに加える
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' 0 〜 9 までの 10 個の配列を確保する
    Me.MyTextBoxes = New TextBox(9) {}

    For i As Integer = 0 To 9
        ' 新しいインスタンスを生成する
        Me.MyTextBoxes(i) = New TextBox()

        ' ここで、プロパティなどを必要に応じて設定します
        Me.MyTextBoxes(i).Name = "MyTextBox" & i.ToString()
        Me.MyTextBoxes(i).Text = "MyTextBox" & i.ToString()
        Me.MyTextBoxes(i).Top  = i * 20

        ' このコントロールをフォームに追加する
        Me.Controls.Add(Me.MyTextBoxes(i))

        ' イベントも統合する場合は、イベント ハンドラを追加する
        AddHandler MyTextBoxes(i).TextChanged, AddressOf MyTextBoxes_TextChanged
    Next i
End Sub

' フォームの Load イベントで追加したイベント
Private Sub MyTextBoxes_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    ' イベントが起きたコントロールは sender 引数から取得する
    Dim cTextBox As TextBox = DirectCast(sender, TextBox)

    ' イベントが起きたコントロール名とその旨を表示する
    MessageBox.Show(cTextBox.Name & " の Text を変更しました")
End Sub