【问题标题】:Problem with adding nodes to a treeview将节点添加到树视图的问题
【发布时间】:2011-09-28 18:05:03
【问题描述】:

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

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

有什么解决办法吗?


感谢大家!这现在有效!

【问题讨论】:

  • 在将节点添加到集合后,您尝试在同一级别添加两次相同的节点,您再次引用同一节点以创建新的树节点实例,因此出现错误
  • 您提供的代码不会产生任何错误。

标签: c# winforms


【解决方案1】:

是的,使用深拷贝

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】:

    看看TreeNode.Clone Method

    同样来自TreeNodeCollection.Add Method (TreeNode)

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

    【讨论】:

      【解决方案3】:

      在这里:

      TreeNode nd = treeView1.Nodes[0];
      

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-09
          • 2012-02-10
          • 2013-03-25
          • 2010-11-26
          • 2017-11-18
          • 2014-03-18
          相关资源
          最近更新 更多