In einem unserer früheren Tipps ( Deshalb wurde dort schon aufgerufen, eine Methode zu entwickeln, um nur die Ornder zu laden, die man sehen konnte (und natürlich auch die Unterornder, da ja sonst das schöne "+" zu expandieren des Ordners fehlen würde). Naja genug geredet Hier die einzelnen Funktionen mit kurzen Beschreibungen:
Fügen Sie nachfolgenden Code in ein Modul ein: Option Explicit ' Diese Funktion lädt die erste Ebene eines ' Verzeichnisses und gibt die Nodes als Collectionen ' zurück Function LoadWithFolders(oTreeView As TreeView, _ sDirectory As String, _ sImage As String, _ sExpandedImage As String) As Collection Dim vFolder As Variant Dim oNode As Node Dim coNodes As New Collection Dim coFolders As New Collection ' Unterordner holen Set coFolders = GetSubFolders(sDirectory) For Each vFolder In coFolders ' jeden Ordner mit Bild dem TreeView hinzufügen Set oNode = oTreeView.Nodes.Add(, tvwLast, , vFolder, sImage) ' Icon setzen, wenn es aufgeklappt wird oNode.ExpandedImage = sExpandedImage Call coNodes.Add(oNode) Next vFolder Set LoadWithFolders = coNodes End Function ' Diese Funktion fügt alle Unterordner eines Verzeichnisses ' dem TreeView hinzu und das gleiche nochmal für jeden ' Unterordner (damit das '+' zum expandieren auch da ' ist) Function AddFolders(oTreeView As TreeView, _ oParentNode As Node, _ sDirectory As String, _ sImage As String, _ sExpandedImage As String) As Collection Dim x As Long Dim oChildNode As Node Dim coChildNodes As New Collection Set coChildNodes = AddSubFolders(oTreeView, oParentNode, _ sDirectory, sImage, sExpandedImage) ' Alle Verzeichnisse des Ordners hinzufügen For Each oChildNode In coChildNodes Call AddSubFolders(oTreeView, oChildNode, _ sDirectory & "\" & oChildNode.Text, _ sImage, sExpandedImage) Next oChildNode Set AddFolders = coChildNodes End Function ' Diese Funktion fügt alle Unterordner eines ' Verzeichnisses hinzu. ' Hierbei werden alle Nodes erstmal gelöscht, damit ' auch immer alles aktuell bleibt Function AddSubFolders(oTreeView As TreeView, _ oParentNode As Node, _ sDirectory As String, _ sImage As String, _ sExpandedImage As String) As Collection Dim vSubFolder As Variant Dim oNode As Node Dim coSubFolders As Collection Dim coChildNodes As New Collection Set coSubFolders = GetSubFolders(sDirectory) ' Childnodes löschen Call DeleteChildNodes(oTreeView, oParentNode) ' Hinzufügen aller Childnodes For Each vSubFolder In coSubFolders Set oNode = oTreeView.Nodes.Add(oParentNode, _ tvwChild, , vSubFolder, sImage) oNode.ExpandedImage = sExpandedImage Call coChildNodes.Add(oNode) Next vSubFolder Set AddSubFolders = coChildNodes End Function ' Diese Funktion löscht alle Childnodes eines ' Node-Objekts Sub DeleteChildNodes(oTreeView As TreeView, _ oNode As Node) Dim x As Long Dim oChildNode As Node Dim oNextNode As Node ' 1. Childnode Set oChildNode = oNode.Child For x = 1 To oNode.Children ' Nächstes Childnode "merken" Set oNextNode = oChildNode.Next ' Childnode löschen Call oTreeView.Nodes.Remove(oChildNode.Index) ' Gehe zu nächstem Childnode Set oChildNode = oNextNode Next x End Sub ' Diese Funktion ermittelt die Unterordner eines ' Verzeichnisses und gibt deren Namen in einer ' Collection zurück Function GetSubFolders(sDirectory As String) As Collection Dim sFolder As String Dim coSubFolders As New Collection If ExistDir(sDirectory) Then sFolder = Dir(sDirectory & "\*", vbDirectory) Do While sFolder <> vbNullString ' aus den alten DOS Zeiten, gibt es noch die ' Ordner, die einfach nur "." und ".." heißen. ' Diese werden hier aussortiert. If Left$(sFolder, 1) <> "." And ExistDir(sDirectory & "\" & sFolder) Then Call coSubFolders.Add(sFolder) End If ' nächsten Ordner sFolder = Dir Loop Set GetSubFolders = coSubFolders End If End Function ' Diese Funktion überprüft, ob es sich bei dem ' übergebenen Verzeichnis um einen existierenden ' Ordner handelt Function ExistDir(sdir As String) As Boolean ' Falls Verzeichnis nicht vorhanden ist On Error Resume Next ExistDir = ((GetAttr(sdir) And vbDirectory)) And (Err = 0) On Error GoTo 0 End Function Beispiel:
Option Explicit Private sDirectory As String Private Sub Form_Load() ' ImageList zuordnen Set TreeView1.ImageList = ImageList1 ' Startordner sDirectory = "c:" ' Alle Ordner in C: anzeigen Call LoadWithFolders(TreeView1, sDirectory, _ "OrdnerZu", "OrdnerOffen") End Sub Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node) Call AddFolders(TreeView1, Node, _ sDirectory & "\" & Node.FullPath, _ "OrdnerZu", "OrdnerOffen") End Sub Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) Call AddSubFolders(TreeView1, Node, _ sDirectory & "\" & Node.FullPath, _ "OrdnerZu", "OrdnerOffen") End Sub Dieser Tipp wurde bereits 25.247 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevOutBar 4.0 ![]() Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Tipp des Monats TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |