当前位置:编程文档 >> C# >> treeview遍历查找节点的方法
首页

treeview遍历查找节点的方法

所属类别:C#
推荐指数:★★☆
文档人气:15
本周人气:7
发布日期:2008-8-2
写代码时需要一个treeview遍历查找节点的方法,在网上找了半天,基本上都是讲treeview遍历查找节点的理论(递归法,非递归法),于是自已写一个treeview遍历查找节点的方法类,特与大家分享!请各位多提点宝贵意见,谢谢了!

treeview遍历查找节点的方法类功能:

1。查找treeview中的某个节点,从前后两个方向查找!

2。从指定节点开始,查找treeview中的某个节点,从前后两个方向查找!

源代码:

view plaincopy to clipboardprint?
//判断是否是要查找的节点 -- 委托

public delegate bool ValidTreeNodeDelegate(TreeNode treeNode);

//

public class ClsFindTreeNodeOfTreeView

{



enum Direction{prev,next};

private TreeView _TreeView;

private bool isFoundStartTreeNode;



public ClsFindTreeNodeOfTreeView(TreeView treeView)

{

_TreeView = treeView;

isFoundStartTreeNode = false;

}



/// <summary>

/// 查找下一个节点

/// </summary>

/// <param name="_ValidTreeNodeDelegate">判断是否是需要的节点的委托</param>

/// <returns></returns>

public bool FindNextNode(ValidTreeNodeDelegate _ValidTreeNodeDelegate)

{

return FindNode(Direction.next, _ValidTreeNodeDelegate,null);

}



/// <summary>

/// 查找下一个节点

/// </summary>

/// <param name="treeNode">开始结点</param>

/// <param name="_ValidTreeNodeDelegate">判断是否是需要的节点的委托</param>

/// <returns></returns>

public bool FindNextNode(TreeNode treeNode, ValidTreeNodeDelegate _ValidTreeNodeDelegate)

{

return FindNode(Direction.next, _ValidTreeNodeDelegate, treeNode);

}





/// <summary>

/// 查找上一个节点

/// </summary>

/// <param name="_ValidTreeNodeDelegate">判断是否是需要的节点的委托</param>

/// <returns></returns>

public bool FindPrevNode(ValidTreeNodeDelegate _ValidTreeNodeDelegate)

{

return FindNode(Direction.prev, _ValidTreeNodeDelegate, null);

}



/// <summary>

/// 查找上一个节点

/// </summary>

/// <param name="treeNode">开始结点</param>

/// <param name="_ValidTreeNodeDelegate">判断是否是需要的节点的委托</param>

/// <returns></returns>

public bool FindPrevNode(TreeNode treeNode, ValidTreeNodeDelegate _ValidTreeNodeDelegate)

{

return FindNode(Direction.prev, _ValidTreeNodeDelegate, treeNode);

}



#region FindNode

private bool FindNode(Direction _Direction, ValidTreeNodeDelegate _ValidTreeNodeDelegate, TreeNode startTreeNode)

{

bool isFound = false;

if (_Direction == Direction.next)

{

for (int i = 0; i < _TreeView.Nodes.Count; i++)

{

if (startTreeNode==null||isFoundStartTreeNode)

{

isFound = _ValidTreeNodeDelegate(_TreeView.Nodes[i]);

if (isFound) break;

}

else

{

//找到开始结点

if (_TreeView.Nodes[i] == startTreeNode)

{

isFoundStartTreeNode = true;

}

}

isFound = FindNode(_TreeView.Nodes[i], _Direction, _ValidTreeNodeDelegate, startTreeNode);

if (isFound) break;

}

}

else

{

for (int i = _TreeView.Nodes.Count - 1; i >= 0; i++)

{

if (startTreeNode == null || isFoundStartTreeNode)

{

isFound = _ValidTreeNodeDelegate(_TreeView.Nodes[i]);

if (isFound) break;

}

else

{

//找到开始结点

if (_TreeView.Nodes[i] == startTreeNode)

{

isFoundStartTreeNode = true;

}

}

isFound = FindNode(_TreeView.Nodes[i], _Direction, _ValidTreeNodeDelegate, startTreeNode);

if (isFound) break;

}



}

return isFound;

}



private bool FindNode(TreeNode treeNode, Direction _Direction, ValidTreeNodeDelegate _ValidTreeNodeDelegate, TreeNode startTreeNode)

{

bool isFound = false;

if (_Direction == Direction.next)

{

for (int i = 0; i < treeNode.Nodes.Count; i++)

{

if (startTreeNode == null || isFoundStartTreeNode)

{

isFound = _ValidTreeNodeDelegate(treeNode.Nodes[i]);

if (isFound) break;

}

else

{

//找到开始结点

if (treeNode.Nodes[i] == startTreeNode)

{

isFoundStartTreeNode = true;

}

}

isFound = FindNode(treeNode.Nodes[i], _Direction, _ValidTreeNodeDelegate, startTreeNode);

if (isFound) break;

}

}

else

{

for (int i = treeNode.Nodes.Count - 1; i >= 0; i++)

{

if (startTreeNode == null || isFoundStartTreeNode)

{

isFound = _ValidTreeNodeDelegate(treeNode.Nodes[i]);

if (isFound) break;

}

else

{

//找到开始结点

if (treeNode.Nodes[i] == startTreeNode)

{

isFoundStartTreeNode = true;

}

}

isFound = FindNode(treeNode.Nodes[i], _Direction, _ValidTreeNodeDelegate, startTreeNode);

if (isFound) break;

}



}

return isFound;

}

#endregion

}

文档说明:

     

相关文档


读取评论列表……