ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 13.01.2000

Diese Seite wurde zuletzt aktualisiert am 13.01.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für IE, Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Zurück...


Anzeige

(-hg) mailto:hg_containedcontrols@aboutvb.de

Wenn die Eigenschaft MSDN Library - VB ControlContainerControlContainer eines UserControls auf True gesetzt ist, können auf ihm in einem Form wie auf einer PictureBox oder einem Frame-Element andere Steuerelemente platziert werden. Das UserControl dient dann als Container und liefert in seiner internen Eigenschaft MSDN Library - VB ContainedControlsContainedControls eine Auflistung (Collection) der auf ihm platzierten Steuerelemente.

Wenn Sie diese Eigenschaft an eine öffentliche Property Get-Prozedur weiterreichen, kann auch von außen her auf diese Auflistung ähnlich wie auf die MSDN Library - VB ControlsControls-Eigenschaft eines Forms zugegriffen werden:

Public Property Get Controls() As Object
  Set Controls = UserControl.ContainedControls
End Property

Diese Eigenschaft muss allerdings als vom Datentyp Object deklariert werden, da Visual Basic es nicht zulässt, VB-eigene Objekttypen wie Control, Controls u.a. öffentlich zu verwenden.

Die Vorbilder für diese Container-Fähigkeit des UserControls, nämlich die PictureBox und das Frame-Element kennen jedoch leider keine solche Auflistung. Sie können nur über die Controls-Eigenschaft eines Forms ermitteln, welche Steuerelemente auf einem solchen Container platziert sind. Dazu gehen Sie alle in der Controls-Auflistung enthaltenen Steuerelemente durch und prüfen Sie bei jedem, ob sein Container mit dem gegebenen Container übereinstimmt, beispielsweise für MeinePictureBox:

Dim nControl As Control

For Each nControl In FormXY.Controls
  If nControl.Container Is MeinePictureBox Then
    ' ... nControl ist auf MeinePictureBox platziert
  End If
Next

Sie können die so ermittelten Steuerelemente in einer eigenen Collection zusammenfassen, um diese Suche nicht immer wieder aufs Neue durchführen zu müssen. Während jedoch die ContainedControls-Auflistung eines UserControls und die Controls-Auflistung eines Forms automatisch aktualisiert werden, wenn Steuerelemente hinzukommen sollten (etwa nachgeladen in einem Control-Array, oder durch nachträgliche Zuweisung des Containers), müssen Sie diese eigene Collection selbst aktuell halten. Sie können die neu hinzugekommenen Steuerelemente selbst hinzufügen bzw. gegebenenfalls wieder entfernen. Oder Sie stellen die Collection erneut zusammen. Verwenden Sie als Schlüssel beim Einfügen in die Collection den Namen des Steuerelements. Da bei Steuerelementen aus einem Control-Array der Name kein eindeutiger Schlüssel wäre, müssen Sie dann den Index hinzufügen. wenn es einem Control-Array angehört, können Sie den Index aus der Index-Eigenschaft des Steuerelements auslesen. Gehört es jedoch keinem Control-Array an, wird der Laufzeitfehler 343 ausgelöst, den Sie allerdings mit einem vorhergehenden On Error Resume Next abfangen und auswerten können, um einen Schlüssel mit dem Index in Klammern zu generieren, wie er zum Beispiel im VB-Eigenschaftenfenster angezeigt wird.

Verpacken Sie dieses Zusammenstellen der Bequemlichkeit halber am besten in eine eigene Funktion:

Public Function ContainedControls(Container As Control) _
 As Collection
  Dim nCollection As Collection
  Dim nControl As Control
  Dim nIndex As Integer

  Set nCollection = New Collection
  With nCollection
    On Error Resume Next
    For Each nControl In Container.Parent.Controls
      If nControl.Container Is Container Then
        nIndex = nControl.Index
        If Err.Number Then
          Err.Clear
          .Add nControl, nControl.Name
        Else
          .Add nControl, nControl.Name & "(" & nControl.Index & ")"
        End If
      End If
    Next
  End With
  Set ContainedControls = nCollection
End Function


Modul modContainedControls (modContainedControls.bas - ca. 0,8 KB)






Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer