Partager via


Collection Controls pour les utilisateurs de Visual Basic 6.0

Mise à jour : novembre 2007

La collection Controls de Visual Basic 6.0 est remplacée par la classe Control.ControlCollection dans Visual Basic 2008.

Différences conceptuelles

Dans Visual Basic 6.0, la collection Controls est une collection avec des éléments qui représentent les contrôles d'un formulaire ou d'un contrôle conteneur.

Dans Visual Basic 2008, la classe Control.ControlCollection remplace la collection Controls. Les formulaires possèdent une classe Control.ControlCollection par défaut à laquelle il est possible d'accéder à l'aide de la syntaxe Me.Controls.

Add, méthode

Dans Visual Basic 6.0, la méthode Add de la collection Controls est à liaison tardive ; les contrôles sont créés dans la méthode Add en spécifiant la classe Control comme argument.

Dans Visual Basic 2008, la méthode Add de la classe Control.ControlCollection requiert que les contrôles aient été créés à l'aide du mot clé New avant d'être ajoutés à la collection.

Remove, méthode

La méthode Remove de la collection Controls de Visual Basic 6.0 pouvait être utilisée uniquement pour les contrôles ajoutés à l'aide de la méthode Add ; la classe Control.ControlCollection de Visual Basic 2008 n'impose plus cette restriction.

Contrôles Timer et Menu

Dans Visual Basic 6.0, les contrôles Timer et Menu sont des membres de la collection Controls. Dans Visual Basic 2008, ces contrôles sont remplacés par les composants Timer et MainMenu ou ContextMenu ; les composants ne sont pas des membres de la classe Control.ControlCollection.

Contrôles contenus

La collection Controls de Visual Basic 6.0 inclut des contrôles qui sont des enfants d'un contrôle conteneur (par exemple, les contrôles situés dans un contrôle Frame) ; ce n'est plus vrai pour la classe Control.ControlCollection de Visual Basic 2008. Pour parcourir tous les contrôles sur un formulaire, vous devez parcourir de manière récursive la classe Controls de chaque contrôle conteneur.

Modifications du code de la collection Controls

Les exemples ci-dessous illustrent les différences entre les techniques de codage dans Visual Basic 6.0 et dans Visual Basic 2008.

Modifications du code pour ajouter et supprimer des contrôles

Le code ci-dessous illustre les différences entre la collection Controls de Visual Basic 6.0 et la classe 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

Modifications du code pour parcourir la collection Controls

Le code suivant illustre une fonction permettant de parcourir tous les contrôles sur un formulaire, puis d'effacer tous les contrôles CheckBox. Cet exemple suppose que les contrôles CheckBox sont situés sur les contrôles GroupBox ou Panel plutôt que sur le formulaire. Dans l'exemple Visual Basic 2008, comme la collection Controls du formulaire inclut uniquement des contrôles situés directement sur le formulaire, la fonction s'appelle elle-même de manière récursive pour tout contrôle qui a des enfants.

' 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

Mettre à niveau des remarques

Du fait des différences entre les collections Controls de Visual Basic 6.0 et de Visual Basic 2008, les appels à la méthode Add ne sont pas mis à niveau. Vous devez ajouter du code afin de recréer le comportement de votre application en utilisant la méthode Add.

Voir aussi

Référence

Control.Controls

Form.ControlCollection