A. Einführung .
Microsoft Tree View Control ist Teil von Microsoft Windows Common Controls. Es ist ein interessantes Stück Objekt, das verwandte Daten in einer Hierarchie von Knoten anzeigt. Es kann verwandte Daten wie Einträge und Untereinträge in einer Indexliste oder eine Auflistung von Ordnern wie dem linken Fensterbereich des Windows Explorers oder eine Liste verwandter Elemente in einer hierarchischen Struktur mit Baumlinien, Kontrollkästchen und Grafiken von Bitmap-Bildern anzeigen .
Die ListView und Bildliste Steuerelemente sind Teil der allgemeinen Windows-Steuerelemente, und wir werden sie zusammen mit dem TreeView-Steuerelement in Microsoft Access verwenden.
Ich denke, Sie möchten sich einige Beispiel-Demo-Images für das TreeView-Steuerelement ansehen, an deren Erstellung wir in den kommenden Wochen arbeiten werden.
B. Beispiel-Demo-Bilder .
Knoten im eingeklappten Zustand.
- Das Beispiel-Demo-TreeView-Bild mit allen Knoten in reduzierter Form.
Knoten in der erweiterten Ansicht.
- Die obigen TreeView Control Nodes in der erweiterten Ansicht.
Mit Bildsymbolen mit Pfeilspitzen.
- TreeView-Beispielanzeige mit Bildsymbolen mit Pfeilspitzen, die links von jedem Knotentext angezeigt werden.
Root-Level-Knoten haben Ordnerbilder, andere mit Pfeilspitzen.
- Als nächstes die TreeView-Anzeige mit verknüpften Daten in einem Unterformular. Knoten auf Stammebene haben zwei Bilder. Das Bild mit geschlossenem Ordner wird im normalen Modus angezeigt. Wenn der Root-Level-Knoten einen Mausklick empfängt, zeigt er das Ordner-Öffnen-Bild an und zeigt die untergeordneten Knoten in erweiterter Form an.
Entsprechende Informationen werden im Unterformular basierend auf der Auswahl des Knotens auf Stammebene angezeigt.
Eines der ausgewählten Child-Node-Elemente zeigt ein anderes Formular (normalerweise verborgen) mit zugehörigen Informationen an.
TreeView- und ListView-Steuerelemente
- Auf dem nächsten Formularbild gibt es zwei Bereiche. Die artikelbezogenen Knoten der Produktkategorie befinden sich im TreeView-Steuerelement im linken Bereich. Wenn einer der Kategorieartikel einen Klick auf das TreeView-Steuerelement erhält, werden zugehörige Produktartikel mit Menge und Listenpreis in separaten Spalten in ListView angezeigt Steuerung, im rechten Panel.
C. Erstellen von Beispieldaten für den Testlauf.
Lassen Sie uns das TreeView-Steuerelement mit einigen Beispieldaten ausprobieren, die unten gezeigt werden, basierend auf den ersten beiden Bildern, die am Anfang dieser Seite gezeigt werden.
Die obige Beispieldatentabelle hat drei Felder.
-
Die ID Feld ist ein AutoWert-Feld mit eindeutigen ID-Nummern. Der AutoNumber-Typ wird für unsere Bequemlichkeit ausgewählt. In jedem Fall sollten alle Datensätze in der Tabelle einen eindeutigen ID-Wert haben. Wenn es numerisch ist, sollte es in einen String-Typ konvertiert werden, bevor es dem TreeView-Steuerelement hinzugefügt wird.
-
Das zweite Feld ist die Knotenbeschreibung (Desc ). Die Informationszeilen in dieser Spalte sind logisch miteinander verbunden.
-
Die dritte Eltern-ID Feld ist Numerischer Typ. Sie sollten jedoch in den String-Typ konvertiert werden, bevor sie für das TreeView-Steuerelement verwendet werden.
Wir müssen wissen, wie die Werte der Beschreibungsspalte zueinander in Beziehung stehen, auf dieser Grundlage können wir die Beziehung herstellen, indem wir verwandte Werte in die ParentID eingeben Feld.
Zum Beispiel die logische Anordnung der Beziehung zwischen dem Autor von Büchern, den Herausgebern der Bücher, den Buchläden, in denen die Bücher verkauft werden, oder wie die Beziehung zwischen Mitgliedern eines Stammbaums.
Beziehung zwischen Produktkategorie, Produkten, Bestand, Preis usw. Alle diese Informationen erscheinen möglicherweise nicht in einer einzigen Spalte in einer einzigen Tabelle. Sie können auch in verschiedenen Spalten oder in verschiedenen Tabellen erscheinen.
Die Eltern-ID Das Feld ist insofern sehr wichtig, als es die hierarchische Anordnung der Knoten bestimmt. Wenn das ParentID-Feld leer ist, sollte dieser Datensatz als Root-Level-Knoten gehen. Der Child-Node sollte immer seine ParentID mit seinem Parent-Datensatz-ID-Wert ausgefüllt haben.
Knoten auf Stammebene können einen oder mehrere untergeordnete Knoten haben, untergeordnete Knoten können ihre eigenen untergeordneten Knoten haben.
Wir werden die obigen Daten in ein TreeView-Steuerelement laden und sehen, wie es aussieht. Dann füllen wir die ParentId aus Feld mit zugehöriger ID s die Ansicht zu ändern, so wie wir sie in einer logischen Reihenfolge sehen möchten.
D. Bibliotheksdatei für allgemeine Windows-Steuerelemente .
-
Aber öffnen Sie zuerst eine Ihrer Datenbanken oder erstellen Sie eine neue.
-
Öffnen Sie das VBA-Fenster (ALT+F11 ) und wählen Sie Referenzen… aus aus Tools Menü.
-
Suchen Sie nach der Datei:Microsoft Windows Common Controls in der angezeigten Dateiliste und setzen Sie ein Häkchen, um sie auszuwählen.
Wenn Sie die Datei nicht in der Liste finden konnten, klicken Sie auf Durchsuchen... Klicken Sie auf und suchen Sie die Datei:MSCOMLIB.OCX im Windows-Systemverzeichnis, für die Windows 7-Version suchen Sie nach der Datei in SysWOW64 Mappe. Klicken Sie auf OK , um die Auflistung der Bibliotheksdateien zu schließen.
-
Erstellen Sie eine Tabelle mit der folgenden Struktur:
-
Speichern Sie die Tabelle unter dem Namen Sample .
-
Füllen Sie die Tabelle mit den Beispieldaten von 12 Datensätzen, wie in der Datenansicht oben gezeigt.
E. Erstellen eines TreeView-Steuerelements auf einem Formular
-
Erstellen Sie ein neues leeres Formular.
-
Klicken Sie auf die Activex-Steuerelemente Schaltfläche aus den Steuerelementen Suchen Sie in der Gruppe nach dem Microsoft TreeView-Steuerelement Wählen Sie es dann aus.
-
Klicken Sie auf OK um ein TreeView-Steuerelement in das Formular einzufügen.
-
Ziehen Sie das Steuerelement nach unten und rechts, um oben und links vom TreeView-Steuerelement Platz zu lassen. Ziehen Sie den Ziehpunkt in der unteren rechten Ecke in Richtung der rechten und unteren Ecke, um das Steuerelement zu vergrößern, wie im Beispielbild unten.
-
Zeigen Sie das Eigenschaftenblatt des Steuerelements an und ändern Sie seinen Namen Eigenschaftswert zu TreeView0, falls es dort anders ist.
-
VBA-Bearbeitungsfenster des Formulars anzeigen.
- Kopieren Sie den folgenden VBA-Code und fügen Sie ihn in das Modul ein, wobei die dort vorhandenen Codezeilen überschrieben werden:
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim strSQL As String Dim nodKey As String Dim ParentKey As String Dim strText As String Set tv = Me.TreeView0.Object strSQL = "SELECT ID, Desc, ParentID FROM Sample;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the TreeView Root Level Nodes tv.Nodes.Add , , nodKey, strText Else ParentKey = KeyPrfx & CStr(rst!ParentID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the Record as Child Node tv.Nodes.Add ParentKey, tvwChild, nodKey, strText End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
-
Speichern Sie das Formular unter dem Namen frmSample, aber schließen Sie nicht das VBA-Fenster.
G. VBA-Code Zeile für Zeile.
F. Greifen Sie auf den VBA-Code zu.
Lassen Sie uns einen kurzen Blick auf den VBA-Code werfen und verstehen, was er tut.
Im globalen Deklarationsbereich des Formularmoduls wird die Variable tv als TreeView deklariert Objekt. Der KeyPrfx als Konstante deklariert , mit dem Zeichenfolgetypwert „X“.
Der TreeView Knoten Der Schlüsselwert von muss immer vom Typ String sein und benötigt mindestens ein nicht numerisches Zeichen im Knotenschlüssel. Die Schlüsselwerte unserer Beispieltabelle sind alle in numerischer Form, wir können sie umwandeln und zum konstanten Wert „X hinzufügen “. Nur ein numerischer Wert, der in einen Zeichenfolgentyp konvertiert wurde, wird nicht als Knotenschlüssel akzeptiert.
Hinweis: Wenn der Node-Key und Parent-Key Werte bereits in Alpha- oder Alpha-Numeric-Form vorliegen, stellt sich die Frage der Konvertierung nicht. Alle Node-Key-Werte müssen eindeutig sein.
Im Form_Load() Ereignisprozedur werden die Objekte Database und Recordset deklariert. Außerdem werden vier String-Variablen deklariert.
Die Anweisung Set tv =Me.TreeView0.Object Anweisung weist die TreeView0 zu Objekt auf dem Formular in die Objektvariable tv.
Die OpenRecordset()-Anweisung öffnet das Sample Tabelleneinträge mit SQL strSQL.
Die Do While… Anweisung stellt sicher, dass das Recordset nicht leer ist, wenn es leer ist, verlassen Sie die Schleife und beenden Sie das Programm.
Wenn Datensätze vorhanden sind, dann die ParentId des ersten Datensatzes Das Feld wird auf das Vorhandensein eines Werts darin überprüft oder nicht.
Wenn es leer ist, dann ist dieser Datensatz für den Root-Level-Knoten des TreeView-Steuerelements Artikel. Der Root-Level-Knoten benötigt nur den eindeutigen Node-Key Wert, den wir bereits in der ID haben Beschreibung von Feld und Artikel Feldwert für Text Argument.
Wenn die Eltern-ID einen Wert hat, dann ist der Datensatz ein Child-Node (Kind eines Knotens auf Stammebene oder Kind eines untergeordneten Knotens auf höherer Ebene) des TreeView-Objekts.
Die nächste Zeile erstellt den Schlüssel Argumentwert im nodKey String-Variable mit der ID Feldwert, in einen String umgewandelt und dem konstanten Präfix X, Node-Key hinzugefügt wird zu X1 .
Die erste!Desc Feldwert, der der String-Variablen strText, hinzugefügt wurde einfach der Übersichtlichkeit halber und um es kurz zu machen in der Nodes.Add() Wenn die Feldreferenz sehr lang ist, wird dies die Add()-Methode sauber und ordentlich halten.
Die nächste ausführbare Zeile:tv.Node.Add() ruft die Methode Add() von TreeView.Nodes auf Objekt zum Hinzufügen des Knotens zu TreeView0 Kontrolle auf dem Formular frmSample .
Die Syntax der Add()-Methode ist unten als Referenz angegeben:
tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
Alle sechs Parameter des Add() Methode sind optional. Wenn Sie diese Methode ohne Parameter aufrufen, wird ein leerer Root-Level-Knoten angezeigt hinzugefügt und eine leere Baumlinie erscheint als Indikator im TreeView-Steuerelement.
Für TreeView Root Ebene Knoten erfordert den Schlüssel und Text Argumentwerte.
Für die untergeordneten Knoten sind beide [Relativ] und [Beziehung] Argumente sind erforderlich. Wenn Sie einen davon weglassen, wird der Knoten als Stammknoten eingefügt, es wird jedoch kein Fehler generiert.
[Verwandter] ist der NodKey eines vorhandenen Knotens, der in die ParentID des zugehörigen Datensatzes eingegeben wird Feld. [Beziehung] ist ein konstantes tvwChild mit dem numerischen Wert 4, wodurch er als untergeordneter Knoten von Key- identifiziert wird Wert in ParentID Feld.
Die andere Konstante Werte für das Beziehungsargument werden zum Positionieren von untergeordneten Knoten an einer bestimmten Position verwendet. Konstante Werte sind wie folgt:
tvwFirst =0, platziert ihn als ersten Knoten auf der Ebene des relativen Knotens.
tvwLast =1, Orte als letzter Knoten, auf der Ebene des relativen Knotens.
tvwWeiter =2, platziert den Knoten nach einem bestimmten Knoten.
tvwZurück =3, platziert den Knoten unmittelbar vor dem angegebenen Knoten.
Hinweis: Sie können experimentieren, indem Sie jeden Wert in der Beziehung festlegen Argumentieren Sie und führen Sie den Code im Debug-Modus aus, nachdem Sie das VBA-Fenster und das Formular nebeneinander in der Normalansicht beibehalten haben. Beobachten Sie, wie die Nodes in jedem Zyklus der Codeausführung angeordnet werden, um zu verstehen.
Diese sind nützlich, wenn Sie das TreeView-Steuerelement bearbeiten, indem Sie ein Element löschen und an seiner Stelle ein anderes Element einfügen oder an einer bestimmten Stelle einen neuen Knoten hinzufügen.
Ein Knoten mit [relativem] Schlüssel muss in der Knotensammlung vorhanden sein, bevor versucht wird, diesem Knoten einen untergeordneten Knoten hinzuzufügen, andernfalls erzeugt die Add()-Methode einen Fehler.
Dieser Vorgang wird wiederholt, bis alle Datensätze im Recordset verarbeitet sind.
Hinweis: Sie können den VBA-Code nach den Demoläufen erneut überprüfen.
H. Der erste Probelauf.
Öffnen Sie das Formular in der Normalansicht. Das Ergebnis des Probelaufs sieht wie im Bild unten aus.
Es sieht nicht mehr aus als eine normale Listbox. Denken Sie daran, dass wir keinen Wert in die ParentID eingetragen haben Feld in unserem Beispiel Tisch. Wir müssen eine Beziehung zwischen den Elementen in den Datensatzzeilen herstellen, um sie in einer hierarchischen Reihenfolge im TreeView-Steuerelement zu verschieben und zu positionieren.
I. Die Beziehung zwischen Datensätzen verstehen.
- Öffnen Sie die Beispieltabelle und lassen Sie uns die Aufzeichnungen untersuchen und wie sie zusammenhängen.
- Lass uns die Datenbank verlassen Item allein als Root Item.
Das Datenbankobjekt hat auch einige Objekte der obersten Ebene:Anwendung, DBEngine, Arbeitsbereichssammlung und Datenbanksammlung , die wir hier weggelassen haben.
- Dann haben wir die Tabellen Artikel mit ID gruppieren Wert 2.
- Der nächste Tisch , Felder, Feld Elemente beziehen sich auf die Tabellen Gruppe. Wir wollen den Tisch Felder, und Feld Elemente, die unter den übergeordneten Element-Tabellen angeordnet werden sollen Gruppendatensatz mit ID-Wert 2.
- Lassen Sie uns den Datensatz Tabellen nennen als Elternknoten , Tabelle, Felder und Felddatensätze als Child-Nodes .
J. Aktualisieren des ParentID-Felds.
- Also müssen wir den Wert 2 aktualisieren (Knotenschlüssel von Tabellen ) in der parentID Feld der Tabelle , Felder, und Feld Aufzeichnungen.
- Bitte aktualisieren Sie nur diese Datensätze und schließen Sie die Tabelle. Wenn dies erledigt ist, sehen die Aufzeichnungen wie das unten angegebene Bild aus:
-
Öffnen Sie nun Ihr frmSample in der Formularansicht und überprüfen Sie das TreeView-Steuerelement. Das Ergebnis wird unverändert wie das vorherige aussehen. Die Änderungen sind bereits erfolgt, aber für Sie nicht sichtbar.
K. Das Eigenschaftenblatt des TreeView-Steuerelements.
- Drehen Sie das frmSample in der Entwurfsansicht.
- Klicken Sie mit der rechten Maustaste auf das TreeView-Steuerelement und markieren Sie TreeCtrl_Object aus dem Kontextmenü und wählen Sie Eigenschaften .
Das Eigenschaftsblatt sieht wie im folgenden Bild aus:
- Ändern Sie den Linienstil Eigenschaft Wert =1 (tvwRootLines) und klicken Sie auf Anwenden klicken Sie dann auf OK um das Eigenschaftenblatt zu schließen.
L. Nach dem Linienstil ausführen Eigenschaftswertänderung
- Speichern Sie das Formular und öffnen Sie es in der Normalansicht. Jetzt werden die Baumgrenzen korrekt angezeigt. Die Tabellen Knoten hat ein Plus (+ ) Zeichen auf der linken Seite, das anzeigt, dass dieser Knoten einen oder mehrere untergeordnete Knoten auf der nächsten Ebene hat und diese nicht in erweiterter Form vorliegen.
- Klicken Sie auf das Plus-Symbol, um den Knoten zu erweitern und die untergeordneten Knoten mit derselben ParentID anzuzeigen. Wenn Sie auf das Minus-Symbol klicken, werden die untergeordneten Knoten reduziert und ausgeblendet, wodurch sich das Symbol wieder in ein Pluszeichen ändert.
- Die Anzeige sieht im erweiterten Zustand wie das folgende Bild aus:
M. Eltern-ID Aktualisierung anderer Aufzeichnungen.
Wir werden die Formulare aktualisieren notieren Sie ID Wert (Knotenschlüsselwert) in Formular, Steuerelemente, und Steuerung speichert die Eltern-ID Felder, sodass diese Datensätze unter den Formularen aufgelistet werden Knoten als seine untergeordneten Knoten .
Aktualisieren Sie auf ähnliche Weise das ParentID-Feld von Report und Steuerelemente Aufzeichnungen mit Berichten ID (Knotenschlüsselwert) Wert, damit Bericht und Steuerelemente Elemente werden unter dem übergeordneten Knoten Berichte positioniert , da es sich um untergeordnete Knoten handelt .
-
Nehmen Sie Änderungen an Ihren Beispieltabellendatensätzen mit den ParentID-Werten wie unten gezeigt vor:
Nach den obigen Änderungen sieht die TreeView-Anzeige wie im folgenden Bild aus, wenn alle Knoten in erweiterter Form vorliegen.
Alle untergeordneten Knoten, die sich auf die Knoten der Stammebene beziehen:Die Tabellen, Formulare und Berichte sind als Liste unter ihren übergeordneten Knoten gruppiert. Aber ein Kindknoten kann einen Elternknoten, einen Großelternknoten oder einen Urgroßelternknoten haben.
N. Anordnen aller Objekte in logischer hierarchischer Reihenfolge.
Nehmen wir zum Beispiel den ersten Root-Level-Knoten Tabellen . Logisch Feld (mit Datensatz-ID 5) steht in direktem Zusammenhang mit den Fields Sammlung (Datensatz-ID 4), die Felder Sammlung im Zusammenhang mit Table und Tabelle ist Teil von Tabellen Sammlung. Jedes Element in der Gruppe (Datensatznummer 5 bis 2) ist einen Schritt nach oben zur nächsten Ebene verbunden.
Lassen Sie uns also diese untergeordneten Knoten korrekt unter ihrem eigenen übergeordneten Knoten positionieren und sehen, wie es aussieht.
-
Öffnen Sie Ihre Beispieltabelle und ändern Sie die ParentID-Werte der Tabellen im Zusammenhang mit untergeordneten Datensätzen, wie unten gezeigt:
- Das Feld mit Das übergeordnete Element des ID-5-Datensatzes ist Fields, Datensatz mit ID-4, daher haben wir das ParentID-Feld des 5. Datensatzes mit der ID-Nummer 4 aktualisiert.
- In ähnlicher Weise wird das ParentID-Feld des 4. Datensatzes mit 3 aktualisiert, und die ParentID des 3. Datensatzes wird mit Datensatznummer 2 aktualisiert.
-
Hinweis: Gehen Sie nicht davon aus, dass die so angeordneten Gegenstände nebeneinander liegen müssen.
- Speichern Sie nach Änderungen an den Datensätzen die Tabelle und öffnen Sie das frmSample, um die Änderungen anzuzeigen. Ihre TreeView-Anzeige sollte wie das unten angegebene Bild aussehen, mit allen Knoten in erweiterter Form.
Das TreeView Control hat ein eigenes Property Sheet und die Einstellungen beeinflussen sein Aussehen. Also nehmen wir eine Änderung an einer seiner Eigenschaften vor und kehren zurück, um die Baumansicht erneut anzuzeigen.
Einstellungen auf diesem Eigenschaftsblatt ändern das Erscheinungsbild der TreeView-Anzeige.
Der Eigenschafts-Stil auf der linken Seite ist bereits mit den maximal verfügbaren Funktionen eingestellt Option-7 (tvwTreeLinesPlusMinusPictureText).
Der Kind-Knoten eines Root-Level-Knotens kann ein Eltern-Knoten für sein eigenes Kind oder seine eigenen Kinder sein. Auf diese Weise kann es mehrere Stufen im Baum nach unten gehen.
Ändern Sie die anderen beiden Gruppen der ParentID des untergeordneten Knotens Feldwerte, damit sie wie das oben angegebene Bild aussehen.
WÖRTERBUCHOBJEKT
- Wörterbuchobjekte – Grundlagen
- Wörterbuchobjekt-Grundlagen-2
- Sortieren von Dictionary-Objektschlüsseln und -Elementen
- Datensätze aus Wörterbuch anzeigen
- Klassenobjekte als Wörterbucheinträge hinzufügen
- Klassenobjekt-Wörterbuchelement aktualisieren