将节点添加到树视图的问题

时间:2011-07-05 11:43:30

标签: c# winforms

当我尝试将节点从一个树视图复制到另一个树视图时,我收到一个奇怪的错误:“无法在多个位置添加或插入项目'node1'。您必须先将其从当前位置删除或克隆它。 参数名称:node“ 搜索一段时间后,我找不到任何解决方案。我在VB.NET中尝试过这个并且有同样的错误 代码示例:

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

这有什么解决方案吗?

<小时/> 感谢大家!现在可以了!

4 个答案:

答案 0 :(得分:5)

是的,请使用深层复制

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);

答案 1 :(得分:2)

查看TreeNode.Clone Method

同样来自TreeNodeCollection.Add Method (TreeNode)

  

TreeNode只能分配给一个   TreeView控件一次。添加   树节点到新的树视图控件,   你必须从其他树中删除它   首先查看或克隆它。

答案 2 :(得分:0)

在这里:

TreeNode nd = treeView1.Nodes[0];

您正在将节点node1分配给nd引用。

当您稍后将nd添加到另一个TreeView时,您会收到错误,因为node1已经绑定到另一个TreeView。

如果你真的需要这样做,你应该复制/关闭节点,而不是像现在这样简单地引用它。

答案 3 :(得分:0)

您正尝试将同一节点添加到2个不同的树视图中

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