6 votes

Problème d'ajout de nœuds à une arborescence

Lorsque j'ai essayé de copier un nœud d'une arborescence à une autre, j'ai obtenu une erreur étrange : "Impossible d'ajouter ou d'insérer l'élément 'node1' à plus d'un endroit. Vous devez d'abord le supprimer de son emplacement actuel ou le cloner. Nom du paramètre : node" Après avoir cherché pendant un certain temps, je n'ai pas trouvé de solution. J'ai essayé ceci en VB.NET et j'ai eu la même erreur Exemple de code :

TreeNode node1 = new TreeNode("node1");
node1.Name = "node1";
treeView1.Nodes.Add(node1);
TreeNode nd = treeView1.Nodes[0];
treeView2.Nodes.Add(nd);

Existe-t-il des solutions à ce problème ?


Merci à tous ! Cela fonctionne maintenant !

6voto

DeveloperX Points 3609

Oui, utilisez la copie profonde

TreeNode nd = (TreeNode )treeView1.Nodes[0].Clone();

modifiez votre code comme suit

TreeNode node1 = new TreeNode("node1");
node1.Name = "node1";
treeView1.Nodes.Add(node1);
TreeNode nd = (TreeNode )treeView1.Nodes[0].Clone(); // clone the object
treeView2.Nodes.Add(nd);

2voto

astander Points 83138

Jetez un coup d'œil à Méthode TreeNode.Clone

Également de Méthode TreeNodeCollection.Add (TreeNode)

Un TreeNode ne peut être affecté qu'à une seule contrôle TreeView à la fois. Pour ajouter le nœud d'arbre à un nouveau contrôle d'arborescence vous devez d'abord le supprimer de l'autre l'autre arborescence ou le cloner.

0voto

Davide Piras Points 28708

Ici :

TreeNode nd = treeView1.Nodes[0];

vous assignez le noeud node1 à la référence nd.

lorsque vous ajoutez ensuite nd à l'autre TreeView, vous obtenez l'erreur car node1 est déjà lié à l'autre TreeView.

si vous avez vraiment besoin de faire cela, vous devez copier/fermer le nœud et non pas simplement le référencer comme vous le faites actuellement.

0voto

Ben Robinson Points 14558

Vous essayez d'ajouter le même nœud dans deux arborescences différentes.

TreeNode nd = treeView1.Nodes[0]; //make nd reference treeView1.Nodes[0]
treeView2.Nodes.Add(nd);//  add treeView1.Nodes[0] into treeView2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X