"======================================== " BUILDING A TREE PROGRAMATICALLY "======================================== " This approach would be best suited for building " dynamic trees using For..Next loops and such.
Set MyTree2 = New Tree MyTree2.Top = 10 MyTree2.Left = 10 MyTree2.ExpandImage = "plus.gif" MyTree2.CollapseImage = "minus.gif" MyTree2.LeafImage = "webpage.gif"
" Notice the indentation used to reprensent the hierarchy Set Node1 = MyTree2.CreateChild("script") Set SubNode1 = Node1.CreateChild("server") Set secSubNode1 = SubNode1.CreateChild("html") secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">asp</A>" secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">php</A>" secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">jsp</A>"
Set SubNode2 = Node1.CreateChild("os") SubNode2.CreateChild "<A HREF=""#"">winnt</A>" SubNode2.CreateChild "<A HREF=""#"">win2000</A>"
Set Node2 = MyTree2.CreateChild("Desktop") Node2.CreateChild "<A HREF=""#"">Area Code Lookup</A>" Node2.CreateChild "<A HREF=""#"">Arin Based Whois Search</A>" Node2.CreateChild "<A HREF=""#"">World Time Zone Map</A>"
MyTree2.Draw()
Set MyTree2 = Nothing
%>
</BODY> </HTML> 2。tree.asp 类的定义 代码如下 <% "****************************************************** " Author: Jacob Gilley " Email: avis7@airmail.net " My Terms: You can use this control in anyway you see fit " cause I have no means to enforce any guidelines " or BS that most developers think they can get " you to agree to by spouting out words like " "intellectual property" and "The Code Gods". " - Viva la Microsoft! "******************************************************
Dim gblTreeNodeCount:gblTreeNodeCount = 1
Class TreeNode
Public Value Public ExpandImage Public CollapseImage Public LeafImage Public Expanded Private mszName Private mcolChildren Private mbChildrenInitialized
Public Property Get ChildCount() ChildCount = mcolChildren.Count End Property
mbChildrenInitialized = False Expanded = False End Sub
Private Sub Class_Terminate() If mbChildrenInitialized And IsObject(mcolChildren) Then mcolChildren.RemoveAll() Set mcolChildren = Nothing End If End Sub
Private Sub InitChildList() Set mcolChildren = Server.CreateObject("Scripting.Dictionary") mbChildrenInitialized = True End Sub
Private Sub LoadState() If Request(mszName) = "1" Or Request("togglenode") = mszName Then Expanded = True End If End Sub
Public Function CreateChild(szValue)
If Not mbChildrenInitialized Then InitChildList()
Set CreateChild = New TreeNode CreateChild.Value = szValue CreateChild.ExpandImage = ExpandImage CreateChild.CollapseImage = CollapseImage CreateChild.LeafImage = LeafImage
Public Sub LoadTemplate(szFileName) Dim objWorkingNode Dim colNodeStack Dim fsObj, tsObj Dim szLine Dim nCurrDepth, nNextDepth
Set colNodeStack = Server.CreateObject("Scripting.Dictionary") Set fsObj = CreateObject("Scripting.FileSystemObject") Set tsObj = fsObj.OpenTextFile(szFileName, 1)
nCurrDepth = 0 While Not tsObj.AtEndOfLine nNextDepth = 1 szLine = tsObj.ReadLine()
If nCurrDepth = 0 Then Set objWorkingNode = CreateChild(Trim(szLine)) nCurrDepth = 1 Else While Mid(szLine,nNextDepth,1) = vbTab Or Mid(szLine,nNextDepth,1) = " " nNextDepth = nNextDepth + 1 WEnd
If nNextDepth > 1 Then szLine = Trim(Mid(szLine,nNextDepth))
If szLine <> "" Then If nNextDepth > nCurrDepth Then If colNodeStack.Exists(nCurrDepth) Then Set colNodeStack.Item(nCurrDepth) = objWorkingNode Else colNodeStack.Add nCurrDepth, objWorkingNode End If
Set objWorkingNode = objWorkingNode.CreateChild(szLine)
nCurrDepth = nCurrDepth + 1 ElseIf nNextDepth <= nCurrDepth Then
If nNextDepth > 1 Then
nNextDepth = nNextDepth - 1 While Not colNodeStack.Exists(nNextDepth) And nNextDepth > 1 nNextDepth = nNextDepth - 1 WEnd
Set objWorkingNode = colNodeStack.Item(nNextDepth) Set objWorkingNode = objWorkingNode.CreateChild(szLine)
nNextDepth = nNextDepth + 1 Else Set objWorkingNode = CreateChild(szLine) End If
nCurrDepth = nNextDepth End If End If
End If WEnd
tsObj.Close() Set tsObj = Nothing Set fsObj = Nothing
colNodeStack.RemoveAll() Set colNodeStack = Nothing