关于生成目录树结构的类 - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 关于生成目录树结构的类 (http://www.webasp.net/article/3/2209.htm) |
| -- 作者:未知 -- 发布日期: 2003-07-11 |
| 本程序有两文件test.asp 和tree.asp 还有一些图标文件<br>
1。test.asp 调用类生成树 代码如下<br> <%@ Language=VBScript %><br> <html><br> <head><br> <link rel="stylesheet" href="tree.css"><br> <title>tree</title><br> </head><br> <!-- #include file="tree.asp" --><br> <%<br> <br> '========================================<br> ' BUILDING A TREE PROGRAMATICALLY<br> '========================================<br> ' This approach would be best suited for building<br> ' dynamic trees using For..Next loops and such.<br> <br> Set MyTree2 = New Tree<br> MyTree2.Top = 10<br> MyTree2.Left = 10<br> MyTree2.ExpandImage = "plus.gif"<br> MyTree2.CollapseImage = "minus.gif"<br> MyTree2.LeafImage = "webpage.gif"<br> <br> ' Notice the indentation used to reprensent the hierarchy<br> Set Node1 = MyTree2.CreateChild("script")<br> Set SubNode1 = Node1.CreateChild("server")<br> Set secSubNode1 = SubNode1.CreateChild("html")<br> secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">asp</A>"<br> secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">php</A>"<br> secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">jsp</A>"<br> <br> Set SubNode2 = Node1.CreateChild("os")<br> SubNode2.CreateChild "<A HREF=""#"">winnt</A>"<br> SubNode2.CreateChild "<A HREF=""#"">win2000</A>"<br> <br> Set Node2 = MyTree2.CreateChild("Desktop")<br> Node2.CreateChild "<A HREF=""#"">Area Code Lookup</A>"<br> Node2.CreateChild "<A HREF=""#"">Arin Based Whois Search</A>"<br> Node2.CreateChild "<A HREF=""#"">World Time Zone Map</A>"<br> <br> MyTree2.Draw()<br> <br> Set MyTree2 = Nothing<br> <br> %><br> <br> </BODY><br> </HTML><br> 2。tree.asp 类的定义 代码如下<br> <%<br> '******************************************************<br> ' Author: Jacob Gilley<br> ' Email: avis7@airmail.net<br> ' My Terms: You can use this control in anyway you see fit<br> ' cause I have no means to enforce any guidelines<br> ' or BS that most developers think they can get<br> ' you to agree to by spouting out words like <br> ' "intellectual property" and "The Code Gods".<br> ' - Viva la Microsoft!<br> '******************************************************<br> <br> Dim gblTreeNodeCount:gblTreeNodeCount = 1<br> <br> Class TreeNode<br> <br> Public Value<br> Public ExpandImage<br> Public CollapseImage<br> Public LeafImage<br> Public Expanded<br> Private mszName<br> Private mcolChildren<br> Private mbChildrenInitialized<br> <br> Public Property Get ChildCount()<br> ChildCount = mcolChildren.Count<br> End Property<br> <br> Private Sub Class_Initialize()<br> mszName = "node" & CStr(gblTreeNodeCount)<br> gblTreeNodeCount = gblTreeNodeCount + 1<br> <br> mbChildrenInitialized = False<br> Expanded = False<br> End Sub <br> <br> Private Sub Class_Terminate()<br> If mbChildrenInitialized And IsObject(mcolChildren) Then<br> mcolChildren.RemoveAll()<br> Set mcolChildren = Nothing<br> End If<br> End Sub<br> <br> Private Sub InitChildList()<br> Set mcolChildren = Server.CreateObject("Scripting.Dictionary")<br> mbChildrenInitialized = True<br> End Sub<br> <br> Private Sub LoadState()<br> If Request(mszName) = "1" Or Request("togglenode") = mszName Then<br> Expanded = True<br> End If<br> End Sub<br> <br> Public Function CreateChild(szValue)<br> <br> If Not mbChildrenInitialized Then InitChildList()<br> <br> Set CreateChild = New TreeNode<br> CreateChild.Value = szValue<br> CreateChild.ExpandImage = ExpandImage<br> CreateChild.CollapseImage = CollapseImage<br> CreateChild.LeafImage = LeafImage<br> <br> mcolChildren.Add mcolChildren.Count + 1, CreateChild<br> <br> End Function<br> <br> Public Sub Draw()<br> <br> LoadState()<br> <br> Response.Write "<table border=""0"">" & vbCrLf<br> Response.Write "<tr><td>" & vbCrLf<br> <br> If Expanded Then<br> Response.Write "<a href=""javascript:collapseNode('" & mszName & "')""><img src=""" & CollapseImage & """ border=""0""></a>" & vbCrLf<br> ElseIf Not mbChildrenInitialized Then<br> Response.Write "<img src=""" & LeafImage & """ border=0>" & vbCrLf<br> Else<br> Response.Write "<a href=""javascript:expandNode('" & mszName & "')""><img src=""" & ExpandImage & """ border=""0""></a>" & vbCrLf<br> End If<br> <br> Response.Write "</td>" & vbCrLf<br> Response.Write "<td>" & Value & "</td></tr>" & vbCrLf<br> <br> If Expanded Then<br> Response.Write "<input type=""hidden"" name=""" & mszName & """ value=""1"">" & vbCrLf<br> <br> If mbChildrenInitialized Then<br> Response.Write "<tr><td> </td>" & vbCrLf<br> Response.Write "<td>" & vbCrLf<br> <br> For Each ChildNode In mcolChildren.Items<br> ChildNode.Draw()<br> Next<br> <br> Response.Write "</td>" & vbCrLf<br> Response.Write "</tr>" & vbCrLf<br> End If<br> End If<br> <br> Response.Write "</table>" & vbCrLf<br> <br> End Sub<br> <br> End Class<br> <br> <br> Class Tree<br> <br> Public Top<br> Public Left<br> Public ExpandImage<br> Public CollapseImage<br> Public LeafImage<br> Private mszPosition<br> Private mcolChildren<br> <br> Public Property Let Absolute(bData)<br> If bData Then mszPosition = "absolute" Else mszPosition = "relative"<br> End Property<br> <br> Public Property Get Absolute()<br> Absolute = CBool(mszPosition = "absolute")<br> End Property<br> <br> Private Sub Class_Initialize()<br> Set mcolChildren = Server.CreateObject("Scripting.Dictionary")<br> mnTop = 0<br> mnLeft = 0<br> mszPosition = "absolute"<br> End Sub <br> <br> Private Sub Class_Terminate()<br> mcolChildren.RemoveAll()<br> Set mcolChildren = Nothing<br> End Sub<br> <br> Public Function CreateChild(szValue)<br> <br> Set CreateChild = New TreeNode<br> <br> CreateChild.Value = szValue<br> CreateChild.ExpandImage = ExpandImage<br> CreateChild.CollapseImage = CollapseImage<br> CreateChild.LeafImage = LeafImage<br> <br> mcolChildren.Add mcolChildren.Count + 1, CreateChild<br> <br> End Function<br> <br> Public Sub LoadTemplate(szFileName)<br> Dim objWorkingNode<br> Dim colNodeStack<br> Dim fsObj, tsObj<br> Dim szLine<br> Dim nCurrDepth, nNextDepth<br> <br> Set colNodeStack = Server.CreateObject("Scripting.Dictionary")<br> Set fsObj = CreateObject("Scripting.FileSystemObject")<br> Set tsObj = fsObj.OpenTextFile(szFileName, 1)<br> <br> nCurrDepth = 0<br> While Not tsObj.AtEndOfLine<br> nNextDepth = 1<br> szLine = tsObj.ReadLine()<br> <br> If nCurrDepth = 0 Then<br> Set objWorkingNode = CreateChild(Trim(szLine))<br> nCurrDepth = 1<br> Else<br> While Mid(szLine,nNextDepth,1) = vbTab Or Mid(szLine,nNextDepth,1) = " "<br> nNextDepth = nNextDepth + 1<br> WEnd<br> <br> If nNextDepth > 1 Then szLine = Trim(Mid(szLine,nNextDepth))<br> <br> If szLine <> "" Then<br> If nNextDepth > nCurrDepth Then<br> If colNodeStack.Exists(nCurrDepth) Then<br> Set colNodeStack.Item(nCurrDepth) = objWorkingNode<br> Else<br> colNodeStack.Add nCurrDepth, objWorkingNode<br> End If<br> <br> Set objWorkingNode = objWorkingNode.CreateChild(szLine)<br> <br> nCurrDepth = nCurrDepth + 1<br> ElseIf nNextDepth <= nCurrDepth Then<br> <br> If nNextDepth > 1 Then <br> <br> nNextDepth = nNextDepth - 1<br> While Not colNodeStack.Exists(nNextDepth) And nNextDepth > 1<br> nNextDepth = nNextDepth - 1<br> WEnd<br> <br> Set objWorkingNode = colNodeStack.Item(nNextDepth)<br> Set objWorkingNode = objWorkingNode.CreateChild(szLine)<br> <br> nNextDepth = nNextDepth + 1<br> Else<br> Set objWorkingNode = CreateChild(szLine)<br> End If<br> <br> nCurrDepth = nNextDepth<br> End If<br> End If<br> <br> End If<br> WEnd<br> <br> tsObj.Close()<br> Set tsObj = Nothing <br> Set fsObj = Nothing<br> <br> colNodeStack.RemoveAll()<br> Set colNodeStack = Nothing<br> <br> End Sub<br> <br> <br> Public Sub Draw()<br> <br> AddClientScript()<br> <br> Response.Write "<div id=""treectrl"" style=""left: " & Left & "px; top: " & Top & "px; position: " & mszPosition & ";"">" & vbCrLf<br> Response.Write "<form name=""treectrlfrm"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """ method=""get"">" & vbCrLf<br> Response.Write "<table border=""0"">" & vbCrLf<br> Response.Write "<tr><td>" & vbCrLf<br> <br> For Each ChildNode In mcolChildren.Items<br> ChildNode.Draw()<br> Next<br> <br> Response.Write "</td></tr>" & vbCrLf<br> Response.Write "</table>" & vbCrLf<br> <br> Response.Write "<input type=""hidden"" name=""togglenode"" value="""">" & vbCrLf<br> Response.Write "</form>" & vbCrLf<br> Response.Write "</div>" & vbCrLf<br> <br> End Sub<br> <br> Private Sub AddClientScript()<br> %><br> <script language="JavaScript"><br> <br> function expandNode(szNodeName)<br> {<br> if(document.layers != null) {<br> document.treectrl.document.treectrlfrm.togglenode.value = szNodeName;<br> document.treectrl.document.treectrlfrm.submit();<br> }<br> else {<br> document.all["treectrlfrm"].togglenode.value = szNodeName;<br> document.all["treectrlfrm"].submit();<br> }<br> }<br> <br> function collapseNode(szNodeName)<br> {<br> if(document.layers != null) {<br> document.treectrl.document.treectrlfrm.elements[szNodeName].value = -1;<br> document.treectrl.document.treectrlfrm.submit();<br> }<br> else {<br> document.treectrlfrm.elements[szNodeName].value = -1;<br> document.treectrlfrm.submit();<br> }<br> }<br> <br> </script><br> <% <br> End Sub<br> <br> End Class<br> <br> %><br> 演示地址:http://www.cnaspol.com/templatetree/test.asp |
| webasp.net |