Freigeben über


Controls-Auflistung für Visual Basic 6.0-Benutzer

Aktualisiert: November 2007

Die Controls-Auflistung von Visual Basic 6.0 wird in Visual Basic 2008 durch die Control.ControlCollection-Klasse ersetzt.

Konzeptionelle Unterschiede

In Visual Basic 6.0 war die Controls-Auflistung eine Auflistung, deren Elemente die in einem Formular oder Containersteuerelement enthaltenen Steuerelemente darstellten.

In Visual Basic 2008 ersetzt die Control.ControlCollection-Klasse die Controls-Auflistung. Formulare haben eine Control.ControlCollection-Standardklasse, auf die mit der Syntax Me.Controls zugegriffen werden kann.

Add-Methode

In Visual Basic 6.0 wird die Add-Methode der Controls-Auflistung spät gebunden. Die Steuerelemente werden durch die Add-Methode erstellt, indem die Control-Klasse als Argument festgelegt wird.

In Visual Basic 2008 setzt die Add-Methode der Control.ControlCollection-Klasse voraus, dass die Steuerelemente mit dem New-Schlüsselwort erstellt wurden, bevor sie der Auflistung hinzugefügt werden.

Remove-Methode

Die Remove-Methode der Controls-Auflistung in Visual Basic 6.0 konnte nur für Steuerelemente verwendet werden, die mit der Add-Methode hinzugefügt wurden. Diese Einschränkung gilt nicht für die Control.ControlCollection-Klasse in Visual Basic 2008.

Timer-Steuerelement und Menu-Steuerelement

In Visual Basic 6.0 sind das Timer-Steuerelement und das Menu-Steuerelement Member der Controls-Auflistung. In Visual Basic 2008 werden diese Steuerelemente durch die Komponenten Timer und MainMenu oder ContextMenu ersetzt. Komponenten sind keine Member der Control.ControlCollection-Klasse.

Container-Steuerelemente

Die Controls-Auflistung in Visual Basic 6.0 umfasst Steuerelemente, die untergeordnete Elemente eines Containersteuerelements sind (z. B. Steuerelemente, die sich auf einem Frame-Steuerelement befinden). Bei der Control.ControlCollection-Klasse in Visual Basic 2008 ist dies nicht der Fall. Um alle Steuerelemente eines Formulars zu durchlaufen, muss die Controls-Klasse jedes Containersteuerelements rekursiv durchlaufen werden.

Änderungen am Code für die Controls-Auflistung

Im folgenden Beispiel werden Unterschiede in den Codierungstechniken von Visual Basic 6.0 und Visual Basic 2008 aufgezeigt.

Änderungen am Code für das Hinzufügen und Entfernen von Steuerelementen

Im folgenden Code werden Unterschiede zwischen der Controls-Auflistung in Visual Basic 6.0 und der Control.ControlCollection-Klasse in Visual Basic 2008 veranschaulicht.

' 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

Änderungen am Code für das Durchlaufen der Controls-Auflistung

Im folgenden Code wird eine Funktion veranschaulicht, die alle in einem Formular enthaltenen Steuerelemente durchläuft und anschließend alle CheckBox-Steuerelemente deaktiviert. In diesem Beispiel wird davon ausgegangen, dass die CheckBox-Steuerelemente auf einemGroupBox-Steuerelement oder einem Panel-Steuerelement und nicht auf dem Formular platziert werden. Da die Controls-Auflistung des Formulars nur Steuerelemente enthält, die sich direkt auf dem Formular befinden, ruft sich die Funktion im Visual Basic 2008-Beispiel rekursiv für alle Steuerelemente auf, denen andere Steuerelemente untergeordnet sind.

' 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

Hinweise zum Durchführen einer Aktualisierung

Wegen der Unterschiede zwischen den Controls-Auflistungen von Visual Basic 6.0 und Visual Basic 2008 werden Aufrufe der Add-Methode nicht aktualisiert. Sie müssen Code hinzufügen, um unter Verwendung der neuen Add-Methode ein entsprechendes Anwendungsverhalten zu erzielen.

Siehe auch

Referenz

Control.Controls

Form.ControlCollection