Controls Collection for Visual Basic 6.0 Users

The Visual Basic 6.0 Controls collection is replaced by the Control..::.ControlCollection class in Visual Basic 2008.

Conceptual Differences

In Visual Basic 6.0, the Controls collection is a collection with elements that represent the controls on a form or container control.

In Visual Basic 2008, the Control..::.ControlCollection class replaces the Controls collection. Forms have a default Control..::.ControlCollection class that can be accessed using the syntax Me.Controls.

Add Method

In Visual Basic 6.0, the Add method of the Controls collection is late-bound; controls are created in the Add method by specifying the Control class as an argument.

In Visual Basic 2008, the Add method of the Control..::.ControlCollection class requires that the controls were created using the New keyword before being added to the collection.

Remove Method

The Remove method of the Visual Basic 6.0 Controls collection could only be used for controls that were added using the Add method; the Visual Basic 2008 Control..::.ControlCollection class does not have this restriction.

Timer and Menu Controls

In Visual Basic 6.0, the Timer and Menu controls are members of the Controls collection. In Visual Basic 2008, these controls are replaced by the Timer and MainMenu or ContextMenu components; components are not members of the Control..::.ControlCollection class.

Contained Controls

The Visual Basic 6.0 Controls collection includes controls that are children of a container control (for example, controls sited on a Frame control); the Visual Basic 2008 Control..::.ControlCollection class does not. To iterate through all the controls on a form, you must recursively iterate through the Controls class of each container control.

Code Changes for the Controls Collection

The following examples illustrate the differences in coding techniques between Visual Basic 6.0 and Visual Basic 2008.

Code Changes for Adding and Removing Controls

The following code illustrates differences between the Visual Basic 6.0 Controls collection and the Visual Basic 2008 Control..::.ControlCollection class.

' Visual Basic 6.0
Private Sub Command1_Click()
    ' Declare a new Control variable.
    Dim c As Control
    ' Create and add the new control.
    Set c = Controls.Add("VB.TextBox", "Text1")
    ' Make the new control visible.
    c.Visible = True
    ' Set the initial text.
    c.Text = "Hello"
    ' Retrieve the text from the new TextBox.
    If Controls.Count > 1 Then
        MsgBox (Controls("Text1").Text)
    End If
    ' Remove the new control.
    Controls.Remove (Text1)
    ' The following line causes a compilation error.
    ' You cannot remove controls added at design time.
    Controls.Remove (Command1)
End Sub
' Visual BasicPrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' Create a new TextBox control.Dim TextBox1 AsNew System.Windows.Forms.TextBox
    TextBox1.Name = "TextBox1"    ' Add the new control to the form's Controls collection.Me.Controls.Add(TextBox1)
    ' No need to set Visible property.    ' Set the initial text.
    TextBox1.Text = "Hello"    ' Retrieve the text from the new TextBox.IfMe.Controls.Count > 1 Then
        MsgBox(Me.Controls("TextBox1").Text)
    EndIf    ' Remove the new control.Me.Controls.Remove(TextBox1)
    ' Remove the control added at design time.Me.Controls.Remove(Button1)
EndSub

Code Changes for Iterating Through the Controls Collection

The following code illustrates a function for iterating through all the controls on a form and then clearing all CheckBox controls. This example assumes that the CheckBox controls are situated on GroupBox or Panel controls rather than on the form. In the Visual Basic 2008 example, since the form's Controls collection only includes controls situated directly on the form, the function recursively calls itself for any control that has children.

' Visual Basic 6.0
Private Sub ClearChecks()
    For Each Control in Me.Controls
        If TypeOf Control Is CheckBox Then
            Control.Value = vbUnchecked
        End If
    Next
End Sub
' Visual BasicPrivateSub ClearChecks(ByVal Container As Control)
    Dim ctl As Control
    Dim chk As CheckBox
    ForEach ctl In Container.Controls
        IfTypeOf ctl Is CheckBox Then
            chk = ctl
            chk.Checked = FalseEndIf        ' Recursively call this function for any container controls.If ctl.HasChildren Then
            ClearChecks(ctl)
        EndIfNextEndSub

Upgrade Notes

Because of differences between Visual Basic 6.0 and the Visual Basic 2008 Controls collections, calls to the Add method are not upgraded. You must add code to recreate the behavior of your application using the new Add method.

See Also

Reference

Control..::.Controls

Form..::.ControlCollection