Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2009.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie per VBA auf die Elemente eines TreeView-Steuerelements zugreifen.

Techniken

Formulare, VBA, TreeView

Voraussetzungen

Access 2002 und höher

Beispieldateien

TreeViewImGriff.mdb

Shortlink

683

TreeView-Elemente im Griff

André Minhorst, Duisburg

Das TreeView-Steuerelement ist der Platzhirsch unter den Steuerelementen zur Anzeige hierarchischer Daten. Wie man es füllt, haben wir in diversen Beiträgen gezeigt - aber wie ändert man darin enthaltene Elemente später und wie greift man überhaupt auf diese zu? Dieser Beitrag beleuchtet, wie Sie beliebige Elemente referenzieren, löschen, durchlaufen, ersetzen und ihre Eigenschaften anpassen.

Wer noch keine Erfahrung mit dem TreeView-Steuerelement gesammelt hat und diesen Beitrag zum Anlass nimmt, sich einmal damit zu beschäftigen, sei auf die erwähnten bereits erschienenen Beiträge verwiesen - die Suche nach dem Begriff TreeView im Onlinearchiv von www.access-im-unternehmen.de dürfte genügend Lesematerial liefern.

An dieser Stelle wollen wir uns nur peripher mit dem dem Füllen des TreeViews beschäftigen und eher auf den Umgang mit dem bereits voller Früchte hängenden Baum konzentrieren. Da gibt es nämlich genügend Fragestellungen wie etwa die folgenden:

  • Wie referenziere ich ein Element im TreeView?
  • Wie erfahre ich, wie das aktuelle Element heißt?
  • Wie springe ich zum ersten, letzten, vorherigen oder nächsten Element im TreeView?
  • Wie kann ich die vorhandenen Elemente durchlaufen?

Beispieldatenbank

Damit Sie sich als TreeView-Neuling nicht durch alle bereits erschienenen Beiträge zu diesem Thema durchkämpfen müssen, hier in aller Kürze der Ablauf zum Füllen des TreeViews mit Beispieldaten. Die Beispieldatenbank enthält drei Tabellen namens tblA, tblB und tblC, die im Datenmodell wie in Abb. 1 aussehen und bei denen die Tabelle tblB über das Fremdschlüsselfeld AID mit Tabelle tblA und die Tabelle tblC auf die gleiche Weise mit tblB verknüpft ist. Die kleine Routine aus Listing 1 füllt die Tabellen mit Beispieldaten.

Listing 1: Schreiben von Beispieldaten in die Tabellen tblA, tblB und tblC

Public Sub Beispieldaten()

Dim db As DAO.Database

Set db = CurrentDb

Dim intA As Integer, lngA As Long, intB As Integer, lngB As Long, intC As Integer

db.Execute "DELETE FROM tblA”, dbFailOnError

For intA = 1 To 5

db.Execute "INSERT INTO tblA(AWert) VALUES(‘Wert” & intA & "‘)”, dbFailOnError

    lngA = db.OpenRecordset("SELECT @@IDENTITY”).Fields(0)

    For intB = 1 To 5

        db.Execute "INSERT INTO tblB(BWert, AID) VALUES(‘Wert” & intB & "‘, " & lngA & ")”, _

        dbFailOnError

        lngB = db.OpenRecordset("SELECT @@IDENTITY”).Fields(0)

        For intC = 1 To 5

            db.Execute "INSERT INTO tblC(CWert, BID) VALUES(‘Wert” & intC & "‘, " _

            & lngB & ")”, dbFailOnError

        Next intC

    Next intB

Next intA

End Sub

Listing 3: Auf- und abbewegen im TreeView-Steuerelement

Testen und debuggen ohne Hindernisse

Wenn Sie die folgenden Beispiele ausprobieren oder eigene Zugriffe auf die Elemente des TreeView-Steuerelements programmieren, werden zweifelsohne Fehler auftreten. Dies führt dazu, dass weitere Aufrufe nicht mehr funktionieren, wenn Sie nicht das Formular schließen und erneut öffnen. Woran liegt das? Access speichert Variablen nur so lange, bis ein Fehler auftritt. Access 2007-Entwickler können die TempVars-Auflistung verwenden, um Variablen darin zu speichern, die auch beim Auftreten von Fehlern nicht ihren Wert verlieren. Alle anderen sollten eine entsprechende Fehlerbehandlung einbauen, die unbehandelte Fehler ausschließt - behandelte Fehler löschen keine Variableninhalte. Wenn Sie zum Experimentieren oder in der Anfangsphase eines Projekts auf eine Fehlerbehandlung verzichten wollen, können Sie sich anderweitig behelfen. Vom Löschen der Variablen ist vor allem objTreeView betroffen, das nur einmal beim Laden des Formulars mit einem Verweis auf ctlTreeView.Object bestückt wird. Wenn Sie dauerhaft über diese Variable auf ctlTreeView.Object zugreifen möchten, schreiben Sie einfach folgende Zeilen in den Kopf des Klassenmoduls:

Dim WithEvents m_TreeView As MSComctlLib.TreeView

Private Function objTreeView() As

MSComctlLib.TreeView

    If m_TreeView Is Nothing Then

        Set m_TreeView = Me.ctlTreeView.Object

    End If

    Set objTreeView = m_TreeView

End Function

Statt einer Objektvariablen namens objTreeView haben Sie es nun mit einer gleichnamigen Funktion zu tun. Der eigentliche Verweis wird in der Objektvariablen m_TreeView gespeichert. Über die Funktion objTreeView können Sie im übrigen Code genau so auf ctlTreeView.Object zugreifen wie über die zuvor definierte Variable objTreeView. Die Funktion prüft, ob m_TreeView noch einen Wert enthält, was normalerweise der Fall ist, oder ob sie leer ist - dies ist in der Regel auf einen vorherigen unbehandelten Fehler zurückzuführen - und füllt sie erneut mit einem Verweis auf ctlTreeView.Object.

Noch ein Hinweis: Wenn Sie diese Variante verwenden, müssen Sie natürlich die folgende Zeile aus dem Form_Load-Ereignis des Formulars entfernen:

Set objTreeView = Me!ctlTreeView.Object

Private Sub cmdNachOben_Click()

    If objTreeView.SelectedItem.Index > 1 Then

        objTreeView.SelectedItem = objTreeView.Nodes.Item(objTreeView.SelectedItem.Index - 1)

    Else

        objTreeView.SelectedItem = objTreeView.Nodes.Item(objTreeView.Nodes.Count)

    End If

    End Sub

Private Sub cmdNachUnten_Click()

    If objTreeView.SelectedItem.Index < objTreeView.Nodes.Count Then

        objTreeView.SelectedItem = objTreeView.Nodes.Item(objTreeView.SelectedItem.Index + 1)

    Else

        objTreeView.SelectedItem = objTreeView.Nodes.Item(1)

    End If

    End Sub

pic001.png

Abb. 1: Datenmodell für das Füllen des TreeView-Steuerelements

Das Formular frmTreeView enthält ein Steuerelement namens ctlTreeView, dessen Einstellungen Sie zunächst nicht anpassen. Der Code zum Füllen und für den Zugriff auf das TreeView-Steuerelement landet im Klassenmodul des Formulars frmTreeView, das Sie durch die Auswahl des Eintrags [Ereignisprozedur] für die Eigenschaft Beim Laden des Formulars und anschließendes Anklicken der Schaltfläche mit den drei Punkten anlegen. Dort finden Sie gleich eine leere Ereignisprozedur namens Form_Load, die Sie aber noch nicht bestücken. Zuerst fügen Sie in den Kopf des Moduls die folgende Deklaration ein, die das Schreiben des Beispielcodes durch die Bereitstellung von IntelliSense vereinfacht:

Dim WithEvents objTreeView As MSComctlLib.TreeView

Dann vervollständigen Sie die Ereignisprozedur so, dass diese die erste Ebene des TreeView-Steuerelements mit den Datensätzen aus Tabelle tblA füllt (s. Listing 2). Während des Füllens ruft die Routine gleich die Routine FillNodeA und diese wiederum FillNodeB auf, um die Datensätze der Tabellen tblB und tblC ebenfalls zum TreeView hinzuzufügen. Dieses sieht nach dieser Behandlung wie in Abb. 2 aus.

Listing 2: Füllen der ersten drei Ebenen des TreeViews mit den Daten der Beispieltabellen

Private Sub Form_Load()

    Dim rstA As DAO.Recordset

    Dim objNode As MSComctlLib.Node

    ...

    Set objTreeView = Me!ctlTreeView.Object

    Set rstA = db.OpenRecordset("SELECT * FROM tblA”, dbOpenDynaset)

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

TreeView-Konfigurator

TreeView nach Bedarf füllen

Das Treeview-Steuerelement

Hierarchien visualisieren

Listenfeld und Details in einem Formular

Steuerelemente zur Laufzeit verschieben

HTML-Editor-Steuerelement

Das Optionsgruppen-Steuerelement

Zugriff auf Formulare

Modale Dialoge mal anders

Zugriff auf Daten in Formularen und Steuerelementen

Softwareprojekte verwalten

Formulare im Blickpunkt

Unterformulare: Daten anlegen und löschen

Registersteuerelemente von A-Z

Access 2007: Bilder und Schaltflächen

Flexible Datumstextfelder

Tipps und Tricks

Formularposition speichern und wiederherstellen

Auswahlfelder im Ribbon

Access-FAQ: Rund um Access

Das Append-Only-Memofeld

Benutzerdefinierte Formatierung

Ereignisprozeduren implantieren

Ereignisprozeduren

Lookup-Daten verwalten

Mehrsprachige Anwendungen

Daten visualisieren mit HTML

Listenfelder von A-Z

Unterformulare im Gleichschritt

© 2003-2015 André Minhorst Alle Rechte vorbehalten.