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

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

スポンサーリンク

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

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

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

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

サンプルコード

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

VB2005 (.NET Framework 2.0) 以降
' プライベートなフィールドとして配列を定義する
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 = TryCast(sender, TextBox)

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

Visual Basic .NET 2003 (.NET Framework 1.1) 以前では TryCast 演算子が使用できません。Visual Basic .NET 2003 (.NET Framework 1.1) 以前では以下のとおり、TypeOf 演算子と DirectCast 演算子を使用します。

VB.NET 2003 (.NET Framework 1.1) 以前
' プライベートなフィールドとして配列を定義する
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 引数から取得する
    If Typeof sender Is TextBox Then
        Dim cTextBox As TextBox = DirectCast(sender, TextBox)

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

関連するリファレンス

以下に関連するリファレンスを示します。

技術文書
  • コントロール配列 (Visual Basic 6.0 ユーザー向け)

スポンサーリンク