在TreeView查找某一节点
在TreeView查找某一節點,通常有兩種方法,一種是遞歸的,一種不是遞歸,但都是深度優先算法。其中,非遞歸方法效率高些,而遞歸算法要簡潔一些。
?
第一種,遞歸算法,代碼如下:
??? private TreeNode FindNode( TreeNode tnParent,string strValue )
??? {
??????? if( tnParent == null ) return null;
??????? if( tnParent.Text == strValue )return tnParent;
?
??????? TreeNode tnRet = null;
??????? foreach( TreeNode tn in tnParent.Nodes )
??????? {
??????????? tnRet = FindNodeExt( tn, strValue );
??????????? if( tnRet != null ) break;
??????? }
??????? return tnRet;
??? }
?
第二種,非遞歸算法,代碼如下:
??? private TreeNode FindNode( TreeNode? tnParent,string strValue )
??? {
??????? if( tnParent == null ) return null;
?
??????? if( tnParent.Text == strValue )return tnParent;
??????? else if( tnParent.Nodes.Count == 0 ) return null;
?
??????? TreeNode tnCurrent, tnCurrentPar;
?
??????? //Init node
??????? tnCurrentPar = tnParent;
??????? tnCurrent = tnCurrentPar.FirstNode;
?
??????? while( tnCurrent != null && tnCurrent != tnParent )
??????? {
??????????? while( tnCurrent != null )
??????????? {
??????????????? if( tnCurrent.Text == strValue )return tnCurrent;
??????????????? else if( tnCurrent.Nodes.Count > 0 )
??????????????? {
??????????????????? //Go into the deepest node in current sub-path
??????????????????? tnCurrentPar = tnCurrent;
??????????????????? tnCurrent = tnCurrent.FirstNode;
??????????????? }
??????????????? else if( tnCurrent != tnCurrentPar.LastNode )
??????????????? {
??????????????????? //Goto next sible node
??????????????????? tnCurrent = tnCurrent.NextNode;
??????????????? }
??????????????? else
??????????????????? break;
??????????? }
???????????????
??????????? //Go back to parent node till its has next sible node
??????????? while( tnCurrent != tnParent && tnCurrent == tnCurrentPar.LastNode )
??????????? {
??????????????? tnCurrent = tnCurrentPar;
??????????????? tnCurrentPar = tnCurrentPar.Parent;
??????????? }
?
??????????? //Goto next sible node
??????????? if( tnCurrent != tnParent )
??????????????? tnCurrent = tnCurrent.NextNode;
??????? }
??????? return null;
??? }
?
?????? 程序調用,如下:
??????? TreeNode tnRet = null;
??????? foreach( TreeNode tn in yourTreeView.Nodes )
??????? {
??????????? tnRet =? FindNodeExt( tn, yourValue );
??????????? if( tnRet != null ) break;
??????? }
遍歷Treeview的所有節點(包括子節點)添加到新的treeview中 C#
foreach (TreeNode item in treeView1.Nodes)//遍歷Treeview的所有節點
??????????????? {
??????????????????? TreeNode node =GetNode(item);//遍歷子節點
??????????????????? treeView2.Nodes.Add(node);
??????????????? }
private TreeNode GetNode(TreeNode node)
??????? {
??????????? if (node.Nodes.Count == 0)
??????????????? return new TreeNode(node.Text);
??????????? TreeNode ns = new TreeNode(node.Text);
??????????? foreach (TreeNode item in node.Nodes)
??????????? {
??????????????? TreeNode n = GetNode(item);???????????????
??????????????? ns.Nodes.Add(n);
??????????? }
??????????? return ns;
??????? }
總結
以上是生活随笔為你收集整理的在TreeView查找某一节点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息图:程序员/开发人员实际在用哪些工具
- 下一篇: 新驾考科目三有四个地方易犯错 多名教练提