2010-03-31 19 views
6

Estoy intentando copiar un nodo de vista de árbol a treenodecollection para algún otro procesamiento. Cuando ejecuto el treeview.nodes.clear() en la línea siguiente, mi colección treenode se está volviendo nula. ¿Puede decirme cómo copiar los nodos treeview a treenodecollection y guardar las copias de los nodos incluso después de llamar al método Clear de los nodos de vista de árbol reales?Copia profunda de nodos de vista de árbol

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

Respuesta

3

objeto TreeNode es clonable con todo el subárbol completo. Es por eso que puede usar List que contendrá nodos raíz con sus subárboles.

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, Gracias. Tu solución funcionó para nosotros. –

0

Puede lograr una copia profunda serializando su treeView y deserializándolo como un objeto nuevo.

Tener un vistazo a esto: How do you do a deep copy of an object in .NET (C# specifically)?

+0

TreeNodeCollection no es serializable – Stremlenye

+0

Hola Juan, Gracias por la sugerencia. Pero, como el objeto TreeView no es serializable, no podemos utilizar la sugerencia proporcionada en el artículo anterior. Puedo escribir una función revolvente para recorrer todos los nodos de la vista de árbol y copiar los valores de los tipos de valor base de un objeto Node para lograr el requisito. Pero me gustaría saber si hay alguna solución corta e inteligente disponible para este problema. –

Cuestiones relacionadas