导航

c# winform 通过递归在TreeView中查找某个结点

Posted on 2018-11-23 11:40  displaynick  阅读(570)  评论(0编辑  收藏  举报

在保存数据时,为了提高查找效率,将树形结构路径完整保存下来,例如tag值为x的一级节点,下面有一个tag值为y的二级节点,该节点下tag值为z的三级节点,路径就是x/y/z。

查找该节点并设置为选中状态时,通过如下方法(递归)

/// <summary>
/// 在根据路由在树中查找某个节点
/// </summary>
/// <param name="router">路由信息,x/y/z</param>
/// <param name="tv">要查找的数</param>
/// <returns>返回被找到的节点</returns>
public static TreeNode findTreeNode(string router, TreeView tv)
{
    string[] nodeTags = router.Split('/');            
    return  findTreeNode(nodeTags, tv.Nodes,0);
}

/// <summary>
/// 通过递归的方法找到节点
/// </summary>
/// <param name="destTag">要查找的节点的路由</param>
/// <param name="tns">树形目录所有一级节点</param>
/// <param name="j">层级,第一次为0</param>
/// <returns>返回被找到的节点</returns>
public static TreeNode findTreeNode(string[] destTag, TreeNodeCollection tns,int j)
{
    TreeNode tn=null;
    for (int i = 0; i < tns.Count; i++ )
    {
        if (tns[i].Tag.ToString() == destTag[j])
        {
            if (tns[i].Nodes.Count > 0)
            {
                j++;
                tns[i].Expand();
                tn = findTreeNode(destTag, tns[i].Nodes, j);
            }
            else
            {                        
                tn = tns[i];
            }
        }
    }
    return tn;
}