- 在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 = FindNode( 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 = FindNode( tn, yourValue );
- if( tnRet != null ) break;
- }
C#中遍历TreeView的两个常用方法
最新推荐文章于 2018-09-04 12:22:13 发布