|
Möchten Sie von einem Element eines Steuerelemente-Feldes (Control-Arrays) ausgehend die aktuelle Untergrenze oder Obergrenze des Feldes ermitteln? Oder möchten Sie wissen, wie viele Elemente des Steuerelemente-Feldes aktuell geladen sind? Oder möchten Sie Elemente hinzuladen, ohne jedoch vorher im Code das betreffende Steuerelemente-Feld festlegen zu müssen? Dann brauchen Sie eine Möglichkeit, zu einem Element eben dieses Steuerelemente-Feld zu ermitteln. Eine kleine Ungereimtheit verhilft Ihnen dazu.
Einerseits erhalten Sie, wenn Sie die Controls-Collection eines Containers (Form, UserControl usw.) durchsuchen, zu jedem dort vorhandenen Steuerelement den Namen. Bei Steuerelementen, die Element eines Steuerelemente-Feldes sind, erhalten Sie dabei jeweils den Stammnamen, unabhängig vom Index des Elements. Haben Sie beispielsweise drei Elemente des Steuerelemente-Feldes "Command1" in einem Form1 geladen, so wird Ihnen die folgende Schleife (neben der Namen anderer Steuerelemente auf diesem Form) dreimal den Namen "Command1" ausgeben:
Dim nControl As Control
For Each nControl In Form1.Controls
Debug.Print nControl.Name
Next
Normalerweise können Sie ja den Namen eines Steuerelements als Schlüssel verwenden, um auf das Steuerelement über die Controls-Collection zuzugreifen - beispielsweise:
Debug.Print Controls("Command1").Caption
Allerdings funktioniert das nur dann, wenn Command1 ein einzelnes Steuerelement ist. Handelt es sich jedoch um ein Steuerelemente-Feld, liefert Ihnen die Controls-Collection das Stamm-Objekt des Steuerelemente-Feldes. Dieses ist jedoch nicht etwa das erste zur Entwurfszeit auf dem Form angelegte Steuerelement (meistens ursprünglich mit dem Index 0), sondern ein eigenständiges Objekt, das Stamm-Objekt des Steuerelemente-Feldes. Und dieses Objekt liefert Ihnen in seinen Eigenschaften die gesuchte Unter- und Obergrenze (.lbound und .ubound) und die Anzahl der geladenen Elemente (.Count).
Verpacken Sie die Ermittlung dieses Stamm-Objekts in die folgende kleine Hilfsfunktion:
Public Function ControlArray(Control As Control) As Object
Set ControlArray = Control.Parent.Controls(Control.Name)
End Function
Eine weitere Hilfsfunktion lädt zu einem gegebenen Element eines Steuerelemente-Feldes ein neues Element hinzu, wobei immer automatisch der nächsthöchste Index verwendet wird, und gibt das geladene Element zur weiteren Verwendung zurück:
Public Function LoadControl(Control As Control) As Control
Dim nControlArray As Object
Dim nNewIndex As Integer
Set nControlArray = Control.Parent.Controls(Control.Name)
nNewIndex = nControlArray.ubound + 1
Load nControlArray(nNewIndex)
Set LoadControl = nControlArray(nNewIndex)
End Function
|