Search code examples
c#treeviewcopyclone

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


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

        TreeNodeCollection myTreeNodeCollection = treeView1.Nodes;

        TreeNode[] myTreeNodeArray = new TreeNode[treeView1.Nodes.Count];

        treeView1.Nodes.CopyTo(myTreeNodeArray, 0);

        treeView2.Nodes.AddRange(myTreeNodeArray);

But this does not allow me to do so, it asks to either delete the nodes in source treeview or use it Clone! How can I do that? I dont want my source treeview to lose anything in this process.

** UPDATE ** Ok guys I found a complicated code (for me!!) but how can I use this?

    public static T DeepTreeCopy<T>(T obj)
    {
        object result = null;
        using (var ms = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(ms, obj);
            ms.Position = 0;
            result = (T)formatter.Deserialize(ms); ms.Close();
        }
        return (T)result;
    } 

Solution

  • 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