Option Strict On Imports System.IO Imports System.Runtime.Serialization.Formatters.Soap Public Class NodeSerializer Structure sNode Dim node As String Dim level As Integer End Structure Dim GlobeNodes As New ArrayList() Public Sub LoadNodes(ByVal TV As TreeView, ByVal fName As String) TV.Nodes.Clear() Dim formatter As SoapFormatter Dim openFile As FileStream openFile = File.Open(fName, FileMode.Open) formatter = New SoapFormatter() GlobeNodes = CType(formatter.Deserialize(openFile), ArrayList) openFile.Close() showNodes(TV) End Sub Private Sub showNodes(ByVal TV As TreeView) Dim o As Object Dim currNode As TreeNode Dim level As Integer = 0 Dim fromLowerLevel As Integer Dim i As Integer For i = 0 To GlobeNodes.Count - 1 o = GlobeNodes(i) Dim oNode As sNode = CType(o, sNode) If oNode.level = level Then If currNode Is Nothing Then currNode = TV.Nodes.Add(oNode.node.ToString) Else currNode = currNode.Parent.Nodes.Add(oNode.node.ToString) End If Else If oNode.level > level Then currNode = currNode.Nodes.Add(oNode.node.ToString) level = oNode.level Else While oNode.level <= level currNode = currNode.Parent level = level - 1 End While currNode = currNode.Nodes.Add(oNode.node.ToString) level = oNode.level End If End If TV.ExpandAll() Application.DoEvents() Next End Sub Public Sub CreateList(ByVal node As TreeNode, ByVal fName As String) Static level As Integer Dim thisNode As TreeNode Dim myNode As sNode Application.DoEvents() myNode.level = level myNode.node = node.Text GlobeNodes.Add(myNode) If node.Nodes.Count > 0 Then level = level + 1 For Each thisNode In node.Nodes CreateList(thisNode, fName) Next level = level - 1 End If SaveNodes(fName) End Sub Private Sub SaveNodes(ByVal fName As String) Dim formatter As SoapFormatter Dim saveFile As FileStream saveFile = File.Create(fName) formatter = New SoapFormatter() formatter.Serialize(saveFile, GlobeNodes) saveFile.Close() End Sub End Class