-4

我有treeView1,我需要在创建treeview2时使用treeView1 的节点treeNode.Text == myString。所以我必须遍历treeView1的所有节点,如果是treeNode.Text == myString,那么我应该把这个节点添加到treeView2,如果这个节点的任何一个子节点有这个属性(treeNode.Text == myString),那么我也应该把这个节点添加到treeView2,即使.Text != myString。换句话说,treeView2object 是一个过滤后的 treeView1 对象。

有人可以给我一个想法如何实现吗?

4

1 回答 1

0

你应该对 TreeViews 使用递归方法,所以试试这个工作正常:

 ...

        foreach (TreeNode item in treeView1.Nodes)//in case you have multiple rootnodes
            treeView2.Nodes.Add((TreeNode)item.Clone());//clone all treeview1 nodes into treeview2

        foreach (TreeNode node in treeView2.Nodes)//in case you have multiple rootnodes
            AmISelected(node, "momo");//filter all nodes recursively

 ...

private bool AmISelected(TreeNode root, string myString)
    {
        bool bfound = false;
        if (root.Text == myString)
            bfound = true;// I do have myString

        for (int i = root.Nodes.Count - 1; i >= 0; i--)
            if (AmISelected(root.Nodes[i], myString))
                bfound = true;// I've a child who have myString

        if (!bfound) //if i don't have myString neither any of my children
            if (root.Parent == null) // is it a root node
                treeView2.Nodes.Remove(root);
            else
                root.Parent.Nodes.Remove(root);

        return bfound;

    }

在此处输入图像描述

于 2012-09-13T23:17:39.167 回答