Abbildung 17.9.2.1: TreeView mit markiertem Eintrag
An geeigneten Stellen werden in den folgenden Abschnitten Teile des Quelltextes des Projektes 'Bildbetrachter' zur Demonstration der Verwendung der Klasse TreeeView angegeben und kurz kommentiert:
Beim ersten Programm-Start können Sie über den Menü-Eintrag 'Datei > Basis-Verzeichnis auswählen' in einem Dialog ein Verzeichnis auswählen, in dem auch Bilder gespeichert sind. Dieses Basis-Verzeichnis aus der System-Verzeichnisstruktur wird mit all seinen Unter-Verzeichnissen auf eine TreeView abgebildet. Beachten Sie die Rekursion in der Prozedur:
Private Sub DirTree2TreeView(BaseDir As String) Dim sDir, sBaseDir, sPattern As String Dim iFilter As Integer sBaseDir = BaseDir sPattern = "*" iFilter = gb.Directory If Exist(sBaseDir) Then For Each sDir In Dir(sBaseDir, sPattern, iFilter).Sort(gb.Descent) TreeView1.Add(sBaseDir &/ sDir, sDir, Picture["icon:/16/directory"], sBaseDir, Null) DirTree2TreeView(sBaseDir &/ sDir) ' recursive loop Next ' Directory Endif ' Exist() ? End ' DirToTreeView(...)
Beim Auswählen eines Verzeichnisses in der TreeView mit einem Maus-Klick wird eine Liste (Array) aller Bild-Dateien im ausgewählten Verzeichnis erzeugt:
Public Sub TreeView1_Select() ' Bild-Liste für das ausgewählte Verzeichnis in der TreeView erzeugen GetImagePaths(TreeView1.Current.Key) If aImagePaths.Count > 0 Then SetEnabled() iPictureIndex = 0 PictureBoxD.Picture = Picture.Load(aImagePaths[0]) ' Anzeige des 1. Bildes in der Bild-Liste ' Einschalten der Bild-Navigation, wenn die Bild-Liste mehr als ein Bild enthält If aImagePaths.Count > 1 Then btnNext.Enabled = True Else btnNext.Enabled = False Endif Endif End ' TreeView1_Select()
Ein Muster-Filter (sPattern) sorgt dafür, dass nur Bild-Dateien (iFilter = gb.File) mit vorgegebenen Extensionen (→ JPG, JPEG, jpeg, jpg, png, gif,.svg) in die Bild-Liste aufgenommen werden. In der Liste stehen die (absoluten) Bild-Datei-Pfade.
Private Sub GetImagePaths(sDir As String) Dim sFile, sPattern As String Dim iFilter As Integer sPattern = "*{.JPG,.png,.JEPG,.jpeg,.jpg,.gif,.svg}" iFilter = gb.File aImagePaths = New String[] ' Neue Bild-Liste If Exist(sDir) Then For Each sFile In Dir(sDir, sPattern, iFilter).Sort(gb.Ascent) aImagePaths.Add(sDir &/ sFile) Next ' File Endif ' Exist() ? End ' GetImagePaths(sDir As String)
Das erste Bild in der Liste wird sofort in einer Picture-Box angezeigt. Anschließend kann man mit den beiden Navigationsbuttons durch die Bild-Liste navigieren. Ist die Bild-Liste leer, so wird ein Default-Bild angezeigt. Die TreeView-Einträge können Sie vollständig auf- und zuklappen, wenn man die beiden Button unter der TreeView nutzt.
Wenn die Anzahl der Einträge in der TreeView mindestens eins ist, wird der interne Zeiger der TreeView auf den ersten Eintrag gesetzt (Zeilen 1 und 2). Dann wird in einer Repeat-Until-Kontroll-Struktur in den Zeilen 4 bis 6 jedes Parent-Element ausgeklappt bis der interne Cursor das untere TreeView-Ende erreicht hat. Dadurch wird der Funktionswert der TreeView-Methode trvTreeView.MoveBelow() aber positiv (!) und somit die Schleife abgebrochen. Analoge Betrachtungen gelten auch für das Einklappen:
[1] Private Sub ExpandAll(trvTreeView As TreeView) [2] If trvTreeView <> Null And trvTreeView.Count > 0 Then [3] trvTreeView.MoveFirst() [4] Repeat [5] trvTreeView.Item.Expanded = True ' → ausklappen [6] Until trvTreeView.MoveBelow() [7] Endif [8] End ' ExpandAll(...)
[1] Private Sub ContractAll(trvTreeView As TreeView) [2] If trvTreeView <> Null And trvTreeView.Count > 0 Then [3] trvTreeView.MoveFirst() [4] Repeat [5] trvTreeView.Item.Expanded = False ' → einklappen [6] Until trvTreeView.MoveBelow() [7] Endif [8] End ' ContractAll(...)
Das Ein- und Ausklappen der Einträge in der TreeView ist im Projekt nur zur Demonstration ausgewählter Methoden der TreeView gedacht.
Wird das Programm beendet, dann wird das aktuelle Verzeichnis als Start-Verzeichnis in die Settings-Datei dir.conf eingetragen. Beispiel:
# Start-Directory [Base] BasePath="/home/hans/11-Buchprojekt/K17_KomF2/17.9_TreeView/URLAUB"
Die Standard-Sprache für das Projekt ist die englische Sprache. Für das Projekt gibt es eine deutsche Sprach-Datei.
Im Projekt → Kapitel 24.3.4 Manager für EMail-Konten finden Sie ein weiteres Beispiel für den Einsatz einer TreeView als Navigation in einer Baum-Struktur.
Beachten Sie: Das Projekt dient nur zur Demonstration der Verwendung der Klasse TreeView. Es fehlen daher dem Programm 'Bildbetrachter' noch einige Details wie Vorschaubilder oder automatische Erkennung des Bildformates, die Sie für einen Bildbetrachter erwartet hätten.