Steuerelementarrays für Visual Basic 6.0-Benutzer

Aktualisiert: November 2007

Obwohl Steuerelementarrays in Visual Basic 2008 nicht mehr unterstützt werden, können Sie mithilfe des Ereignismodells viele Funktionen von Steuerelementarrays kopieren und erweitern.

Konzeptionelle Unterschiede

In Visual Basic 6.0 konnten Steuerelementarrays zum Verwalten von Steuerelementen eines Formulars verwendet werden. Sie ermöglichten die gemeinsame Verwendung von Ereignishandlern, das Durchlaufen von Steuerelementgruppen und das Hinzufügen von Steuerelementen zur Laufzeit.

In Visual Basic 2008 werden Steuerelementarrays nicht mehr unterstützt. Durch Änderungen am Ereignismodell sind Steuerelementarrays überflüssig geworden. .NET Framework bietet die gleichen Fähigkeiten für die Arbeit mit Steuerelementen.

Gemeinsame Nutzung von Ereignishandlern

In Visual Basic 6.0 konnte mithilfe von Steuerelementarrays eine Gruppe von Steuerelementen festgelegt werden, die eine Reihe von Ereignissen gemeinsam nutzten. Die Steuerelemente mussten vom gleichen Typ sein und den gleichen Namen besitzen.

In Visual Basic 2008 kann jeder Ereignishandler Ereignisse von mehreren Steuerelementen behandeln, sogar von Steuerelementen mit anderen Namen und anderen Typen.

Sie können z. B. einem Formular zwei Button-Steuerelemente (Button1 und Button2) sowie ein CheckBox-Steuerelement (CheckBox1) hinzufügen und anschließend einen Ereignishandler erstellen, der das Click-Ereignis für alle drei Steuerelemente behandelt.

Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click

Durchlaufen von Steuerelementen

Ein weiteres Feature von Steuerelementarrays in Visual Basic 6.0 ist die Fähigkeit, eine Gruppe von Steuerelementen mithilfe der Index-Eigenschaft zu durchlaufen. Um z. B. den Text aller TextBox-Steuerelemente in einem Steuerelementarray zu löschen, kann das Steuerelementarray in einer Schleife durchlaufen werden. Dabei wird die Index-Eigenschaft als Schleifenvariable verwendet.

Visual Basic 2008-Steuerelemente verfügen über keine Index-Eigenschaft. Mithilfe der Control.ControlCollection der Control-Klasse können die Steuerelemente eines Formulars oder Containers jedoch weiterhin durchlaufen werden.

In Visual Basic 6.0 konnten Steuerelemente eines einzelnen Steuerelementarrays in verschiedenen Containern positioniert werden. Zum Beispiel können in zwei verschiedenen Frame-Steuerelementen enthaltene TextBox-Steuerelemente zum selben Steuerelementarray gehören.

In Visual Basic 2008 gibt die Controls-Auflistung nur Steuerelemente zurück, die in einem einzelnen Container enthalten sind. Sie müssen die Steuerelemente jedes Containersteuerelements getrennt durchlaufen. Dazu können Sie eine rekursive Funktion verwenden.

Hinzufügen von Steuerelementen während der Laufzeit

In Visual Basic 6.0 konnten einem Steuerelementarray Steuerelemente während der Laufzeit mit der Load-Anweisung hinzugefügt werden. Diese Steuerelemente müssen den gleichen Typ haben wie das Steuerelementarray, und das Steuerelementarray muss zur Entwurfszeit mit mindestens einem Element erstellt werden. Nach dem Hinzufügen des Steuerelements muss die Visible-Eigenschaft auf True festgelegt werden.

In Visual Basic 2008 wird zunächst das New-Schlüsselwort in einer Dim-Anweisung zum Hinzufügen von Steuerelementen während der Laufzeit verwendet und anschließend die Add-Methode für den Container, dem das Steuerelement hinzugefügt werden soll.

Hinzufügen von Ereignishandlern während der Laufzeit

Wenn in Visual Basic 6.0 ein Steuerelement einem Steuerelementarray während der Laufzeit hinzugefügt wurde, wurden die neuen Steuerelementereignisse automatisch von den Ereignissen für das Steuerelementarray behandelt.

In Visual Basic 2008 müssen Sie Ereignishandler für Steuerelemente definieren, die während der Laufzeit hinzugefügt werden. Dies geschieht mithilfe der AddHandler-Anweisung.

Änderungen am Code für Steuerelementarrays

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

Gemeinsame Nutzung von Ereignishandlern

Im folgenden Beispiel wird das Freigeben des Change-Ereignishandlers (TextChanged in Visual Basic 2008) für eine Gruppe von drei TextBox-Steuerelementen veranschaulicht. In Visual Basic 2008 gibt die Handles-Klausel des Ereignishandlers an, welches Steuerelement von dem Ereignis behandelt wird. Der Ereignishandler gibt ein generisches Object zurück, das daher in den spezifischen Objekttyp umgewandelt werden muss (in diesem Fall TextBox), der mithilfe der DirectCast-Methode behandelt werden soll.

' Visual Basic 6.0

Private Sub Text1_Change(Index As Integer)

Select Case Index

Case 0

MsgBox("The text in the first TextBox has changed")

Case 1

MsgBox("The text in the second TextBox has changed")

Case 2

MsgBox("The text in the third TextBox has changed")

End Select

End Sub

' Visual Basic
Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged, _
TextBox2.TextChanged, TextBox3.TextChanged
    Select Case DirectCast(sender, TextBox).Name
        Case TextBox1.Name
            MsgBox("The text in the first TextBox has changed")
        Case TextBox2.Name
            MsgBox("The text in the second TextBox has changed")
        Case TextBox3.Name
            MsgBox("The text in the third TextBox has changed")
    End Select
End Sub
Hinweis:

Das Verhalten von Ereignissen weicht in Visual Basic 2008 geringfügig ab. Das TextChanged-Ereignis wird bei der Initialisierung der einzelnen Steuerelemente ausgelöst (z. B. im Form_Load-Ereignis) und bei einer Änderung des Texts zur Laufzeit. In Visual Basic 6.0 wurde das Change-Ereignis nur bei einer Änderung des Texts ausgelöst.

Durchlaufen von Steuerelementen

Im folgenden Beispiel wird eine Funktion zum Durchlaufen einer Gruppe von Textfeld-Steuerelementen und zum Löschen des Texts veranschaulicht. Im Visual Basic 6.0-Beispiel wird die Index-Eigenschaft eines Steuerelementarrays als Schleifenvariable verwendet.

In Visual Basic 2008 wird ein Control-Objekt als Argument übergeben. Es enthält eine Control.ControlCollection-Auflistung, die alle in dem Steuerelement enthaltenen Steuerelemente beinhaltet. Mit dem Operator Typeof wird festgestellt, ob die einzelnen Steuerelemente vom Typ TextBox sind.

Hinweis:

Ein Form-Objekt ist vom Typ Control. Sie können auch ein Form als Argument übergeben.

Da geschachtelte Steuerelemente in der Control.ControlCollection-Auflistung nicht enthalten sind, wird mithilfe der HasChildren-Methode festgestellt, ob die einzelnen Steuerelemente andere Steuerelemente enthalten. Ist dies der Fall, wird die ClearText-Funktion rekursiv aufgerufen.

' Visual Basic 6.0

Private Sub ClearText()

For i = 0 To Text1().UBound

Text1(i).Text = ""

Next

End Sub

' Visual Basic
Private Sub ClearText(ByVal container As Control)
    Dim ctrl As Control
    For Each ctrl In container.Controls
        If TypeOf (ctrl) Is TextBox Then
            ctrl.Text = ""
        End If
        If ctrl.HasChildren Then
             ClearText(ctrl)
        End If
    Next
End Sub

Hinzufügen von Steuerelementen während der Laufzeit

Im folgenden Beispiel wird das Hinzufügen eines Textfeld-Steuerelements zu einem Formular während der Laufzeit veranschaulicht. In Visual Basic 6.0 wird das Steuerelement einem Steuerelementarray hinzugefügt. In Visual Basic 2008 wird das Steuerelement zur Control.ControlCollection-Auflistung hinzugefügt. In Visual Basic 6.0 wurden Ereignisse für das neue TextBox automatisch vom Steuerelementarray behandelt. In Visual Basic 2008 müssen Sie die Ereignisbehandlung über die AddHandler-Anweisung verknüpfen.

In beiden Beispielen wird vorausgesetzt, dass ein Textfeld-Steuerelement dem Formular während der Entwurfszeit hinzugefügt wird. Im Visual Basic 6.0-Beispiel wird vorausgesetzt, dass ein Steuerelementarray mit einem Element erstellt wurde. Im Visual Basic 2008-Beispiel wird außerdem davon ausgegangen, dass für das erste TextBox-Steuerelement ein Ereignishandler mit dem Namen TextChangedHandler vorhanden ist.

' Visual Basic 6.0

Private Sub AddControl()

' Add a TextBox as the second element of a control array.

Load Text1(1)

' Set the location below the first TextBox.

Text1(1).Move Text1(0).Left, Text1(0).Top + 500

' Make the new TextBox visible

Text1(1).Visible = True

' Visual Basic
' Declare a new TextBox.
Dim TextBox2 As New TextBox
' Set the location below the first TextBox
TextBox2.Left = TextBox1.Left
TextBox2.Top = TextBox1.Top + 30
' Add the TextBox to the form's Controls collection.
Me.Controls.Add(TextBox2)
AddHandler TextBox2.TextChanged, AddressOf TextChangedHandler

Hinweise zum Durchführen einer Aktualisierung

Bei der Aktualisierung einer mit Visual Basic 6.0 erstellten Anwendung auf Visual Basic 2008 werden Steuerelementarrays auf steuerelementspezifische Steuerelementarrayklassen aktualisiert. Diese Klassen sind im Microsoft.VisualBasic.Compatibility.VB6-Namespace enthalten und werden von den Aktualisierungstools zur Emulierung des Verhaltens von Visual Basic 6.0-Steuerelementarrays verwendet.

Obwohl diese Steuerelementarrayklassen in Visual Basic 2008-Neuentwicklungen verwendet werden können, sollten Sie stattdessen das Ereignismodell und die Funktionen von .NET Framework einsetzen.

Siehe auch

Konzepte

Ereignisse und Ereignisbehandlung für Visual Basic 6.0-Benutzer

Weitere Ressourcen

Windows Forms-Steuerelemente für Visual Basic 6.0-Benutzer