Wie man den Inhalt einer ListBox oder einem ListView-Control speicherst bzw. wieder einliest haben wir Ihnen bereits vor längerer Zeit gezeigt. Wie sieht es aber mit dem TreeView-Control aus? Einfach nur die Einträge hintereinander in eine Textdatei speichern und wieder einlesen funktioniert hier nicht korrekt, da es sich meist nicht nur um Parentnodes (Eltern-Objekte) handelt, sondern um verschachelte Node-Strukturen. Im nachfolgenden finden Sie ein Beispielcode, mit dem sich der Inhalt eines TreeViews mit allem Drum und Dran speichern und auch wieder restaurieren lässt. Hierbei werden nicht nur die Einträge und deren Verchachtelungen gespeichert, sondern auch alle Eigenschaften der einzelnen Node-Objekte, wie Image (Symbol), Bold (Fett), Checked (markiert) usw. TreeView-Inhalt speichern ' TreeView-Inhalt speichern Public Sub tvw_Save(tvw As TreeView, ByVal sFile As String) Dim F As Integer Dim oNode As Node Dim NodeX As Node F = FreeFile Open sFile For Output As #F ' Alle Einträge speichern Set oNode = tvw.Nodes(1) Do tvw_SaveItems F, oNode Set oNode = oNode.Next Loop Until oNode Is Nothing Close #F End Sub ' TreeView-Einträge speichern ' ' ACHTUNG! Diese Prozedur wird rekursiv für jeden ' Zweig aufgerufen! ' Private Sub tvw_SaveItems(ByVal F As Integer, ByVal oNode As Node) Dim nIndent As Integer Dim sPath As String Dim sItem() As String Dim NodeX As Node With oNode sPath = .FullPath sItem = Split(sPath, "\") nIndent = UBound(sItem) ' Parent-Node Print #F, tvw_SaveSetData(nIndent, oNode) ' Jetzt alle direkten Child-Nodes If oNode.Children > 0 Then Set NodeX = oNode.Child Do With NodeX If NodeX.Children > 0 Then ' Prozedur rekursiv mit neuem Zweig aufrufen tvw_SaveItems F, NodeX Else ' Eintrag speichern Print #F, tvw_SaveSetData(nIndent + 1, NodeX) End If End With Set NodeX = NodeX.Next Loop Until NodeX Is Nothing End If End With End Sub ' Alle Infos eines Eintrags zusammenfassen Private Function tvw_SaveSetData(ByVal nIndent As Integer, _ oNode As Node) As String With oNode tvw_SaveSetData = String$(nIndent, ".") + vbTab + _ .Key + vbTab + .Text + vbTab + _ CStr(.Image) + vbTab + CStr(.SelectedImage) + vbTab + _ CStr(.ForeColor) + vbTab + CStr(.BackColor) + vbTab + _ CStr(.Bold) + vbTab + .Tag + vbTab + _ CStr(.Checked) + vbTab + CStr(.Expanded) + vbTab + _ CStr(.Sorted) End With End Function TreeView-Inhalt aus Datei einlesen ' TreeView-Einträge aus Datei einlesen Public Sub tvw_Load(tvw As TreeView, ByVal sFile As String) Dim F As Integer Dim sLine As String Dim sData() As String Dim nIndent As Integer Dim sKey As String Dim sText As String Dim nImg As Integer Dim nImgSel As Integer Dim nForeColor As Long Dim nBackColor As Long Dim bBold As Boolean Dim sTag As String Dim bChecked As Boolean Dim bExpanded As Boolean Dim bSorted As Boolean Dim oNode As Node Dim NodeX As Node Dim nLastIndent As Integer ' Existiert die Datei? If Dir$(sFile, vbNormal) <> "" Then With tvw ' Treeview löschen .Nodes.Clear ' Darstellung abschalten .Visible = False DoEvents ' Datei zum Lesen öffnen F = FreeFile Open sFile For Input As #F ' Alle Einträge nacheinander einlesen nLastIndent = 0 While Not EOF(F) Line Input #F, sLine sData = Split(sLine, vbTab) ' Zeile in Einzel-Informationen zerlegen nIndent = Len(sData(0)) sKey = sData(1) sText = sData(2) nImg = Val(sData(3)) nImgSel = Val(sData(4)) nForeColor = Val(sData(5)) nBackColor = Val(sData(6)) bBold = CBool(sData(7)) sTag = sData(8) bChecked = CBool(sData(9)) bExpanded = CBool(sData(10)) bSorted = CBool(sData(11)) If nIndent = 0 Then ' Root Set oNode = .Nodes.Add(, , sKey, sText, nImg, nImgSel) tvw_LoadSetData oNode, nForeColor, nBackColor, _ bBold, bChecked, sTag, bExpanded, bSorted Else ' Parent ermitteln If nIndent < nLastIndent Then While nIndent < nLastIndent Set oNode = oNode.Parent nLastIndent = nLastIndent - 1 Wend ElseIf nIndent > nLastIndent And nIndent > 1 Then Set oNode = NodeX End If ' Eintrag hinzufügen Set NodeX = .Nodes.Add(oNode, tvwChild, _ sKey, sText, nImg, nImgSel) tvw_LoadSetData NodeX, nForeColor, nBackColor, _ bBold, bChecked, sTag, bExpanded, bSorted End If nLastIndent = nIndent Wend ' Darstellung wieder einschalten .Visible = True End With Close #F End If End Sub ' Setze alle gespeicherten Eigenschaften eines ' einzelnen TreeView-Eintrages Private Sub tvw_LoadSetData(oNode As Node, _ ByVal nForeColor As Long, ByVal nBackColor As Long, _ ByVal bBold As Boolean, ByVal bChecked As Boolean, _ ByVal sTag As String, ByVal bExpanded As Boolean, _ ByVal bSorted As Boolean) With oNode .ForeColor = nForeColor .BackColor = nBackColor .Bold = bBold .Checked = bChecked .Tag = sTag .Expanded = bExpanded .Sorted = bSorted End With End Sub Aufruf der Funktionen Um den Inhalt des TreeView-Inhaltes zu speichern, genügt folgender Aufruf: tvw_Save TreeView1, App.Path & "\myTreeView.dat" Um den gespeicherten Inhalt wieder einzulesen, folgender Aufruf: tvw_Load TreeView1, App.Path & "\myTreeView.dat" Dieser Tipp wurde bereits 31.790 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
||||||||||||||||
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. |