复制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.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值