Hi Maik,
so - ab sofort lassen sich TreeView-Inhalt mit allem Drum und Dran speichern und wieder einlesen.
Speichern des TreeView-Inhaltes
<code><font color=green>' TreeView-Inhalt speichern</font>
<font color=#000099>Public</font> <font color=#000099>Sub</font> tvw_Save(tvw _
<font color=#000099>As</font> TreeView, <font color=#000099>ByVal</font> _
sFile <font color=#000099>As</font> <font color=#000099>String</font>)
<font color=#000099>Dim</font> F <font color=#000099>As</font> <font _
color=#000099>Integer</font>
<font color=#000099>Dim</font> oNode <font color=#000099>As</font> Node
<font color=#000099>Dim</font> NodeX <font color=#000099>As</font> Node
F = FreeFile
<font color=#000099>Open</font> sFile <font color=#000099>For</font> <font _
color=#000099>Output</font> <font color=#000099>As</font> #F
<font color=green>' Alle Einträge speichern</font>
<font color=#000099>Set</font> oNode = tvw.Nodes(1)
<font color=#000099>Do</font>
tvw_SaveItems F, oNode
<font color=#000099>Set</font> oNode = oNode.<font color=#000099>Next</font>
<font color=#000099>Loop</font> <font color=#000099>Until</font> oNode Is _
<font color=#000099>Nothing</font>
<font color=#000099>Close</font> #F
<font color=#000099>End</font> <font color=#000099>Sub</font></code> Hilfsfunktionen für das Speichern
<code><font color=green>' TreeView-Einträge speichern</font>
'
<font color=green>' ACHTUNG! Diese Prozedur wird rekursiv für jeden</font>
<font color=green>' Zweig aufgerufen!</font>
'
<font color=#000099>Private</font> <font color=#000099>Sub</font> tvw_SaveItems( _
<font color=#000099>ByVal</font> F <font color=#000099>As</font> <font _
color=#000099>Integer</font>, <font color=#000099>ByVal</font> oNode <font _
color=#000099>As</font> Node)
<font color=#000099>Dim</font> nIndent <font color=#000099>As</font> <font _
color=#000099>Integer</font>
<font color=#000099>Dim</font> sPath <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>Dim</font> sItem() <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>Dim</font> NodeX <font color=#000099>As</font> Node
<font color=#000099>With</font> oNode
sPath = .FullPath
sItem = Split(sPath, "\")
nIndent = <font color=#000099>UBound</font>(sItem)
<font color=green>' Parent-Node</font>
<font color=#000099>Print</font> #F, tvw_SaveSetData(nIndent, oNode)
<font color=green>' Jetzt alle direkten Child-Nodes</font>
<font color=#000099>If</font> oNode.Children > 0 <font _
color=#000099>Then</font>
<font color=#000099>Set</font> NodeX = oNode.Child
<font color=#000099>Do</font>
<font color=#000099>With</font> NodeX
<font color=#000099>If</font> NodeX.Children > 0 <font _
color=#000099>Then</font>
<font color=green>' Prozedur rekursib mit neuem Zwei</font>
<font color=green>' aufrufen</font>
tvw_SaveItems F, NodeX
<font color=#000099>Else</font>
<font color=green>' Eintrag speichern</font>
<font color=#000099>Print</font> #F, tvw_SaveSetData(nIndent + 1, _
NodeX)
<font color=#000099>End</font> <font color=#000099>If</font>
<font color=#000099>End</font> <font color=#000099>With</font>
<font color=#000099>Set</font> NodeX = NodeX.<font _
color=#000099>Next</font>
<font color=#000099>Loop</font> <font color=#000099>Until</font> NodeX Is _
<font color=#000099>Nothing</font>
<font color=#000099>End</font> <font color=#000099>If</font>
<font color=#000099>End</font> <font color=#000099>With</font>
<font color=#000099>End</font> <font color=#000099>Sub</font></code> <code><font color=green>' Alle Infos eines Eintrags zusammenfassen</font>
<font color=#000099>Private</font> <font color=#000099>Function</font> _
tvw_SaveSetData(<font color=#000099>ByVal</font> nIndent <font _
color=#000099>As</font> <font color=#000099>Integer</font>, _
oNode <font color=#000099>As</font> Node) <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>With</font> oNode
tvw_SaveSetData = <font color=#000099>String</font>$(nIndent, ".") + vbTab _
+ _
.Key + vbTab + .Text + vbTab + _
<font color=#000099>CStr</font>(.Image) + vbTab + <font _
color=#000099>CStr</font>(.SelectedImage) + vbTab + _
<font color=#000099>CStr</font>(.ForeColor) + vbTab + <font _
color=#000099>CStr</font>(.BackColor) + vbTab + _
<font color=#000099>CStr</font>(.Bold) + vbTab + .Tag + vbTab + _
<font color=#000099>CStr</font>(.Checked) + vbTab + <font _
color=#000099>CStr</font>(.Expanded) + vbTab + _
<font color=#000099>CStr</font>(.Sorted)
<font color=#000099>End</font> <font color=#000099>With</font>
<font color=#000099>End</font> <font color=#000099>Function</font></code> Laden des Inhaltes aus einer Datei
<code><font color=green>' TreeView-Einträge aus Datei einlesen</font>
<font color=#000099>Public</font> <font color=#000099>Sub</font> tvw_Load(tvw _
<font color=#000099>As</font> TreeView, <font color=#000099>ByVal</font> _
sFile <font color=#000099>As</font> <font color=#000099>String</font>)
<font color=#000099>Dim</font> F <font color=#000099>As</font> <font _
color=#000099>Integer</font>
<font color=#000099>Dim</font> sLine <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>Dim</font> sData() <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>Dim</font> nIndent <font color=#000099>As</font> <font _
color=#000099>Integer</font>
<font color=#000099>Dim</font> sKey <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>Dim</font> sText <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>Dim</font> nImg <font color=#000099>As</font> <font _
color=#000099>Integer</font>
<font color=#000099>Dim</font> nImgSel <font color=#000099>As</font> <font _
color=#000099>Integer</font>
<font color=#000099>Dim</font> nForeColor <font color=#000099>As</font> <font _
color=#000099>Long</font>
<font color=#000099>Dim</font> nBackColor <font color=#000099>As</font> <font _
color=#000099>Long</font>
<font color=#000099>Dim</font> bBold <font color=#000099>As</font> <font _
color=#000099>Boolean</font>
<font color=#000099>Dim</font> sTag <font color=#000099>As</font> <font _
color=#000099>String</font>
<font color=#000099>Dim</font> bChecked <font color=#000099>As</font> <font _
color=#000099>Boolean</font>
<font color=#000099>Dim</font> bExpanded <font color=#000099>As</font> <font _
color=#000099>Boolean</font>
<font color=#000099>Dim</font> bSorted <font color=#000099>As</font> <font _
color=#000099>Boolean</font>
<font color=#000099>Dim</font> oNode <font color=#000099>As</font> Node
<font color=#000099>Dim</font> NodeX <font color=#000099>As</font> Node
<font color=#000099>Dim</font> nLastIndent <font color=#000099>As</font> _
<font color=#000099>Integer</font>
<font color=green>' Existiert die Datei?</font>
<font color=#000099>If</font> Dir$(sFile, vbNormal) <> "" <font _
color=#000099>Then</font>
<font color=#000099>With</font> tvw
<font color=green>' Treeview löschen</font>
.Nodes.Clear
<font color=green>' Darstellung abschalten</font>
.Visible = <font color=#000099>False</font>
DoEvents
<font color=green>' Datei zum Lesen öffnen</font>
F = FreeFile
<font color=#000099>Open</font> sFile <font color=#000099>For</font> _
<font color=#000099>Input</font> <font color=#000099>As</font> #F
<font color=green>' Alle Einträge nacheinander einlesen</font>
nLastIndent = 0
<font color=#000099>While</font> <font color=#000099>Not</font> EOF(F)
<font color=#000099>Line</font> <font color=#000099>Input</font> #F, _
sLine
sData = Split(sLine, vbTab)
<font color=green>' Zeile in Einzel-Informationen zerlegen</font>
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 = <font color=#000099>CBool</font>(sData(7))
sTag = sData(8)
bChecked = <font color=#000099>CBool</font>(sData(9))
bExpanded = <font color=#000099>CBool</font>(sData(10))
bSorted = <font color=#000099>CBool</font>(sData(11))
<font color=#000099>If</font> nIndent = 0 <font _
color=#000099>Then</font>
<font color=green>' Root</font>
<font color=#000099>Set</font> oNode = .Nodes.Add(, , sKey, sText, _
nImg, nImgSel)
tvw_LoadSetData oNode, nForeColor, nBackColor, _
bBold, bChecked, sTag, bExpanded, bSorted
<font color=#000099>Else</font>
<font color=green>' Parent ermitteln</font>
<font color=#000099>If</font> nIndent < nLastIndent <font _
color=#000099>Then</font>
<font color=#000099>While</font> nIndent < nLastIndent
<font color=#000099>Set</font> oNode = oNode.Parent
nLastIndent = nLastIndent - 1
<font color=#000099>Wend</font>
<font color=#000099>ElseIf</font> nIndent > nLastIndent <font _
color=#000099>And</font> nIndent > 1 <font color=#000099>Then</font>
<font color=#000099>Set</font> oNode = NodeX
<font color=#000099>End</font> <font color=#000099>If</font>
<font color=green>' Eintrag hinzufügen</font>
<font color=#000099>Set</font> NodeX = .Nodes.Add(oNode, tvwChild, _
sKey, sText, nImg, nImgSel)
tvw_LoadSetData NodeX, nForeColor, nBackColor, _
bBold, bChecked, sTag, bExpanded, bSorted
<font color=#000099>End</font> <font color=#000099>If</font>
nLastIndent = nIndent
<font color=#000099>Wend</font>
<font color=green>' Darstellung wieder einschalten</font>
.Visible = <font color=#000099>True</font>
<font color=#000099>End</font> <font color=#000099>With</font>
<font color=#000099>Close</font> #F
<font color=#000099>End</font> <font color=#000099>If</font>
<font color=#000099>End</font> <font color=#000099>Sub</font></code> Hilfsfunktion für das Einlesen
<code><font color=green>' Setze alle gespeicherten Eigenschaften eines</font>
<font color=green>' einzelnen TreeView-Eintrages</font>
<font color=#000099>Private</font> <font color=#000099>Sub</font> _
tvw_LoadSetData(oNode <font color=#000099>As</font> Node, _
<font color=#000099>ByVal</font> nForeColor <font color=#000099>As</font> _
<font color=#000099>Long</font>, <font color=#000099>ByVal</font> nBackColor _
<font color=#000099>As</font> <font color=#000099>Long</font>, _
<font color=#000099>ByVal</font> bBold <font color=#000099>As</font> <font _
color=#000099>Boolean</font>, <font color=#000099>ByVal</font> bChecked <font _
color=#000099>As</font> <font color=#000099>Boolean</font>, _
<font color=#000099>ByVal</font> sTag <font color=#000099>As</font> <font _
color=#000099>String</font>, <font color=#000099>ByVal</font> bExpanded <font _
color=#000099>As</font> <font color=#000099>Boolean</font>, _
<font color=#000099>ByVal</font> bSorted <font color=#000099>As</font> <font _
color=#000099>Boolean</font>)
<font color=#000099>With</font> oNode
.ForeColor = nForeColor
.BackColor = nBackColor
.Bold = bBold
.Checked = bChecked
.Tag = sTag
.Expanded = bExpanded
.Sorted = bSorted
<font color=#000099>End</font> <font color=#000099>With</font>
<font color=#000099>End</font> <font color=#000099>Sub</font></code> Aufruf der Funktionen
Speichern des aktuellen Inhaltes
tvw_Save TreeView1, App.Path & "myTreeView.dat" Laden der gespeicherten Daten
tvw_Load TreeView1, App.Path & "myTreeView.dat" So, das war's....
Viel Spaß mit dem Code.
Cu
Dieter |