2010-03-31 3 views
6

J'essaie de copier un noeud treeview vers treenodecollection pour un autre traitement. Quand j'exécute le treeview.nodes.clear() dans la ligne suivante, mon treenodecollection devient nul. Pouvez-vous s'il vous plaît me dire comment copier les nœuds treeview à treenodecollection et conserver les copies des nœuds même après avoir appelé la méthode Clear des nœuds réels de l'arborescence?Copie en profondeur des noeuds de la vue arborescente

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

Répondre

3

objet TreeNode est clonable avec tout entier sous-arbre. C'est pourquoi vous pouvez utiliser List qui contiendra des nœuds racines avec des sous-arbres.

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, Merci. Votre solution a fonctionné pour nous. –

0

Vous pouvez réaliser une copie profonde en sérialisant votre arborescence et en la désérialisant en tant que nouvel objet.

Jetez un oeil à ceci: How do you do a deep copy of an object in .NET (C# specifically)?

+0

TreeNodeCollection n'est pas sérialisable – Stremlenye

+0

Salut John, Merci pour la suggestion. Cependant, comme l'objet TreeView n'est pas sérialisable, nous ne sommes pas en mesure d'utiliser la suggestion fournie dans l'article ci-dessus. Je peux écrire une fonction revorsive pour faire une boucle sur tous les nœuds treeview et copier les valeurs des types de valeurs de base d'un objet Node pour répondre aux besoins. Mais je voudrais savoir s'il existe une solution courte et intelligente disponible pour ce problème. –

Questions connexes