【问题标题】:How to build TreeView object using nodes of another TreeView object?如何使用另一个 TreeView 对象的节点构建 TreeView 对象?
【发布时间】:2012-09-13 20:14:04
【问题描述】:

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

有人可以告诉我如何实现吗?

【问题讨论】:

标签: c# winforms treeview treenode


【解决方案1】:

你应该对 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;

    }

【讨论】:

  • 你为什么用foreach (TreeNode node in treeView2.Nodes)?,我们只需要写rootnode作为第一个参数,像这样:AmISelected(treeView2.Nodes[0], "momo");,它工作正常
  • 另外,我不知道为什么,但是foreach (TreeNode node in treeView.Nodes) 只运行一次,就像 treenodecollection 只包含 rootnode,所以我无法复制树。我过滤了treeView1 本身。
  • 你没有指定你的树视图有一个节点,所以我采取一般情况!如果你的树视图只包含一个根节点,那么treeView2.Nodes[0]
  • 对于第二条评论,第一个循环克隆根节点和他们的孩子请问您是否尝试过此代码,我已经尝试过并且它与多根节点完美配合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
相关资源
最近更新 更多