【发布时间】:2011-08-02 22:46:39
【问题描述】:
我正在尝试使用此代码将树视图的整个树(完全是所有节点)(完全)复制到另一个树视图:
TreeNodeCollection myTreeNodeCollection = treeView1.Nodes;
TreeNode[] myTreeNodeArray = new TreeNode[treeView1.Nodes.Count];
treeView1.Nodes.CopyTo(myTreeNodeArray, 0);
treeView2.Nodes.AddRange(myTreeNodeArray);
但这不允许我这样做,它要求删除源树视图中的节点或使用它克隆!我怎样才能做到这一点?我不希望我的源树视图在这个过程中丢失任何东西。
** 更新 ** 好吧,伙计们,我找到了一个复杂的代码(对我来说!!)但是我该如何使用它呢?
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;
}
【问题讨论】:
-
在第一个代码中,需要先从 TreeView1,Nodes 集合中删除节点,然后再将它们添加到其他集合:
foreach (TreeNode node in treeView1.Nodes) { treeView1.Nodes.Remove(node); }这应该比克隆更快更干净。 -
我认为 @jeffjohnson 的 Clone() 答案应该被标记为已接受的答案。