vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - G?nnen Sie Ihrem SQL-Kommando diesen kr?nenden Abschlu?!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Controls · TreeView   |   VB-Versionen: VB623.09.02
TreeView-Inhalt speichern und einlesen

Eine Universalroutine, mit der sich der Inhalt eines TreeView-Controls mit allem Drum und Dran speichern und laden lässt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  23.719 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    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 23.719 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!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.
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    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.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel