Copy all treeView parent and children to another treeView c# WinForms

前端 未结 4 1297
梦谈多话
梦谈多话 2020-12-17 21:32

I am trying to copy the entire tree (exactly all nodes) of a treeview (completely) to another treeview using this code:

        TreeNodeCollection myTreeNode         


        
相关标签:
4条回答
  • 2020-12-17 22:18

    Using the node.Clone() function works as well...

    foreach (TreeNode node in treeViewSource.Nodes)
    {
        treeViewTarget.Nodes.Add((TreeNode)node.Clone());
    }
    

    Adding a root node will help ensure the "PlusMinus" functionality is viewable.

    TreeNode rootNode = new TreeNode("Root Node");
    treeViewTarget.Nodes.Add(rootNode);
    foreach (TreeNode node in treeViewSource.Nodes)
    {
        rootNode.Nodes.Add((TreeNode)node.Clone());
    }
    rootNode.Expand();
    
    0 讨论(0)
  • 2020-12-17 22:26

    try this

    public void Copy(TreeView treeview1, TreeView treeview2)
    {
        TreeNode newTn;
        foreach (TreeNode tn in treeview1.Nodes)
        {
            newTn = new TreeNode(tn.Text, tn.Value);
            CopyChilds(newTn, tn);
            treeview2.Nodes.Add(newTn);
        }
    }
    
    public void CopyChilds(TreeNode parent, TreeNode willCopied)
    {
        TreeNode newTn;
        foreach (TreeNode tn in willCopied.ChildNodes)
        {
            newTn = new TreeNode(tn.Text, tn.Value);
            parent.ChildNodes.Add(newTn);
        }
    } 
    

    My regards

    0 讨论(0)
  • 2020-12-17 22:29

    You can use this at the desired level

         public void RootCopy(TreeView treeview1, TreeView treeview2)
        {
            TreeNode newNode;
            foreach (TreeNode tnode in treeview1.Nodes)
            {
                newNode = new TreeNode(tnode.Text);
                treeview2.Nodes.Add(newNode);
                if (tnode.Nodes.Count != 0)
                {
                    int _1index = tnode.Index;
                    ChildsCopyLevel2(_1index, treeview1, treeview2);
                }
    
    
            }
    
        }
    
    
        public void ChildsCopyLevel2(int index1, TreeView TV1, TreeView TV2)
        {
            foreach (TreeNode Tnode in TV1.Nodes[index1].Nodes)
            {
                string Childtext = Tnode.Text;
                TV2.Nodes[index1].Nodes.Add(Childtext);
                if (Tnode.Nodes.Count != 0)
                {// ChildsCopyLevel3(Tnode.Nodes.Count, TV1, TV2);
                    int _2index = Tnode.Index;
                    ChildsCopyLevel3(index1, _2index, TV1, TV2);
                }
            }
    
        }
    
    
        public void ChildsCopyLevel3(int index1, int index2, TreeView TV1, TreeView TV2)
        {
            foreach (TreeNode Tnode in TV1.Nodes[index1].Nodes[index2].Nodes)
            {
                string Childtext = Tnode.Text;
                TV2.Nodes[index1].Nodes[index2].Nodes.Add(Childtext);
            }
        }
    
    0 讨论(0)
  • 2020-12-17 22:34

    Like MohD's answer, but with recursion to get all nodes. (Nodes of childnodes)

        public void CopyTreeNodes(TreeView treeview1, TreeView treeview2)
        {
            TreeNode newTn;
            foreach (TreeNode tn in treeview1.Nodes)
            {
                newTn = new TreeNode(tn.Text, tn.ImageIndex, tn.SelectedImageIndex);
                CopyChildren(newTn, tn);
                treeview2.Nodes.Add(newTn);
            }
        }
        public void CopyChildren(TreeNode parent, TreeNode original)
        {
            TreeNode newTn;
            foreach (TreeNode tn in original.Nodes)
            {
                newTn = new TreeNode(tn.Text, tn.ImageIndex, tn.SelectedImageIndex);
                parent.Nodes.Add(newTn);
                CopyChildren(newTn, tn);
            }
        } 
    
    0 讨论(0)
提交回复
热议问题