Colección Controls para usuarios de Visual Basic 6.0

Actualización: noviembre 2007

La colección Controls de Visual Basic 6.0 se ha reemplazado por la clase Control.ControlCollection en Visual Basic 2008.

Diferencias conceptuales

En Visual Basic 6.0, la colección Controls es una colección cuyos elementos representan los controles de un formulario o de un control contenedor.

En Visual Basic 2008, la clase Control.ControlCollection reemplaza a la colección Controls. Los formularios tienen una clase Control.ControlCollection predeterminada, a la que se puede tener acceso por medio de la sintaxis Me.Controls.

Add (Método)

En Visual Basic 6.0, el método Add de la colección Controls se enlaza en tiempo de ejecución; en el método Add, los controles se crean al especificar la clase Control como un argumento.

En Visual Basic 2008, el método Add de la clase Control.ControlCollection requiere que los controles se creen usando la palabra clave New antes de que se agreguen a la colección.

Remove (Método)

El método Remove de la colección Controls de Visual Basic 6.0 únicamente se puede usar en los controles que se agreguen mediante el método Add; la clase Control.ControlCollection de Visual Basic 2008 no presenta esta restricción.

Timer and Menu (Controles)

En Visual Basic 6.0, los controles Timer y Menu son miembros de la colección Controls. En Visual Basic 2008, estos controles se han reemplazado por los componentes Timer y MainMenu o ContextMenu; los componentes no son miembros de la clase Control.ControlCollection.

Controles contenedores

La colección Controls de Visual Basic 6.0 incluye controles que se derivan de un control contenedor (por ejemplo, los controles situados en un control Frame); la clase Control.ControlCollection de Visual Basic 2008 no los incluye. Para recorrer en iteración todos los controles de un formulario, debe recorrer en iteración de forma recursiva la clase Controls de cada control contenedor.

Cambios de código para la colección Controls

Los siguientes ejemplos muestran las diferencias en las técnicas de codificación entre Visual Basic 6.0 y Visual Basic 2008.

El código se modifica para agregar y eliminar controles

El código siguiente ilustra las diferencias que existen entre la colección Controls de Visual Basic 6.0 y la clase Control.ControlCollection de Visual Basic 2008.

' 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 Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' Create a new TextBox control.
    Dim TextBox1 As New 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.
    If Me.Controls.Count > 1 Then
        MsgBox(Me.Controls("TextBox1").Text)
    End If
    ' Remove the new control.
    Me.Controls.Remove(TextBox1)
    ' Remove the control added at design time.
    Me.Controls.Remove(Button1)
End Sub

El código se modifica para recorrer en iteración la colección de controles

El código siguiente ilustra una función diseñada para recorrer en iteración todos los controles de un formulario y para borrar, a continuación, todos los controles CheckBox. Este ejemplo presupone que los controles CheckBox están situados en los controles GroupBox o Panel en lugar de en el formulario. En el ejemplo de Visual Basic 2008, como la colección Controls del formulario únicamente incluye controles que están situados directamente en el formulario, la función se llama de forma recursiva a sí misma para cualquier control con controles secundarios.

' 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 Basic
Private Sub ClearChecks(ByVal Container As Control)
    Dim ctl As Control
    Dim chk As CheckBox
    For Each ctl In Container.Controls
        If TypeOf ctl Is CheckBox Then
            chk = ctl
            chk.Checked = False
        End If
        ' Recursively call this function for any container controls.
        If ctl.HasChildren Then
            ClearChecks(ctl)
        End If
    Next
End Sub

Notas de actualización

Debido a las diferencias que existen entre Visual Basic 6.0 y las colecciones Controls de Visual Basic 2008, no se actualizan las llamadas al método Add. Debe agregar código para recrear el comportamiento de la aplicación mediante el nuevo método Add.

Vea también

Referencia

Control.Controls

Form.ControlCollection