复制TreeView里的内容?

今天有同学问该如何clone一个TreeView。然后我问他是要浅拷贝还是深拷贝,他说浅拷贝也没问题,只要看起来内容一样就行。

那就好办了不是么。TreeView本身没办法Clone(),不过只是要内容一样的话,只要把顶层的TreeNode从源TreeView复制到目标TreeView就OK。

假如我有一个Form1,里面有一个treeView1成员。有一个按钮,点击它会创建一个Form2,像这样:
Form1.cs:
using System;
using System.Windows.Forms;

namespace TestTreeView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form form2 = new Form2(this.treeView1);
            form2.Visible = true;
            form2.Activate();
        }
    }
}


然后Form2里也有一个treeView1成员,并且构造器接受一个TreeView的参数,像这样:
using System.Windows.Forms;

namespace TestTreeView
{
    public partial class Form2 : Form
    {
        public Form2(TreeView tv)
        {
            InitializeComponent();
            this.treeView1.Nodes.Clear();
            foreach (TreeNode node in tv.Nodes)
            {
                TreeNode newNode = node.Clone() as TreeNode;
                this.treeView1.Nodes.Add(newNode);
            }
        }
    }
}


于是我们在Form2的构造器里就把参数里的TreeView的顶层TreeNode都复制了一次。完事。

或者下载一下这个工程去看看吧~

真在工作中肯定是不应该把一个Form的私有TreeView传给别的Form。更好的办法或许是先把TreeNodeCollection给复制到一个一维数组(TreeNodeCollection.CopyTo(TreeNode[] nodeArray, int index)),然后把这个数组传给目标。嘛怎么复制都好,反正浅拷贝的话只要复制顶层节点就OK。

Case closed.

你可能感兴趣的:(C++,c,windows,工作,C#)