Проблема с добавлением узлов в древовидную структуру - PullRequest
5 голосов
/ 05 июля 2011

Когда я пытался скопировать узел из одного дерева в другое, я получил странную ошибку: «Невозможно добавить или вставить элемент« узел1 »в более чем одном месте. Сначала необходимо удалить его из его текущего местоположения или клонировать». , Имя параметра: узел " После поисков я не смог найти никакого решения. Я пробовал это в VB.NET и имел ту же ошибку Пример кода:

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

Есть ли какие-то решения для этого?


Спасибо всем! Это работает сейчас!

Ответы [ 4 ]

5 голосов
/ 05 июля 2011

да, используйте глубокую копию

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

измените ваш код на

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);
2 голосов
/ 05 июля 2011

Взгляните на TreeNode.Clone Метод

Также из TreeNodeCollection.Add Method (TreeNode)

TreeNode может быть назначен только одному Управление TreeView одновременно. Чтобы добавить узел дерева для нового элемента управления представлением дерева, вы должны удалить его из другого дерева сначала просмотрите или клонируйте его.

0 голосов
/ 05 июля 2011

Вы пытаетесь добавить один и тот же узел в 2 разных дерева

TreeNode nd = treeView1.Nodes[0]; //make nd reference treeView1.Nodes[0]
treeView2.Nodes.Add(nd);//  add treeView1.Nodes[0] into treeView2
0 голосов
/ 05 июля 2011

здесь:

TreeNode nd = treeView1.Nodes[0];

вы назначаете узел node1 для ссылки nd.

при последующем добавлении nd к другому TreeView вы получаете ошибку, потому что узел1 уже связанк другому TreeView.

если вам действительно нужно это сделать, вы должны скопировать / закрыть узел, а не просто ссылаться на него, как вы делаете прямо сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...