2010-03-31 113 views
6

我试图将treeview节点复制到treenodecollection进行一些其他处理。当我在下一行执行treeview.nodes.clear()时,我的treenode收集将变为空。你能告诉我如何复制树视图节点到treenodecollection并保留节点的副本,甚至在调用实际树视图节点的Clear方法之后?树视图节点的深度复制

TreeNodeCollection tnc = null; 
private TypeIn() 
{ 
     tnc = treeView1.Nodes; 
     treeView1.Nodes.Clear(); 
     //Now my tnc becomes null, but I want the tnc for future use. 
} 

回答

3

TreeNode对象是可克隆的所有子树全。这就是为什么你可以使用列表将包含根节点与子树。

List<TreeNode> tnc = null; 
private TypeIn() 
{ 
     tnc = new List<TreeNode>(); 
     foreach (TreeNode n in treeView1.Nodes) 
     { 
      tnc.Add((TreeNode)n.Clone()); 
     } 
     treeView1.Nodes.Clear(); 

} 
+0

Stremlenye, 谢谢。您的解决方案为我们工作。 – 2010-03-31 09:12:13

0

您可以通过序列化您的treeView并将其反序列化为新对象来实现深层复制。

看一看这样的: How do you do a deep copy of an object in .NET (C# specifically)?

+0

TreeNodeCollection是不可序列 – Stremlenye 2010-03-31 07:22:36

+0

喜约翰, 感谢您的建议。 但是,由于对象TreeView不是可序列化的对象,我们无法利用上述文章中提供的建议。 我可以写一些revursive函数来循环遍历所有treeview节点,并复制一个Node对象的基值类型的值以达到要求。 但我想知道是否有任何简短而智能的解决方案可用于解决此问题。 – 2010-03-31 07:30:45