仅删除 TreeNodeCollection (Winforms) 的第一个节点

Removing only the first node of a TreeNodeCollection (Winforms)

我有一个 treeview,它是从 xmal 文件中提取的节点集合。假设它们是:

-Rootnode
     -dir
     -choose
     -obj
     -nodecollections
         -Node1
           -node11
           -node12
               -node121
               -node122
        -Node2
           -node21
               -node211
        -...

我正在做的是创建一个 treenode Node1Node2 等的节点集合(忽略 treeview 中的先前节点,只对最后 child) 使用

TreeNodeCollection compare1 = treeView1.Nodes[0].LastNode.Nodes;

这意味着我现在拥有上次 child nodecollections.

的所有 children 个节点

接下来我要检查其中一个 children,例如:Node2 我将其所有 children 节点保存在一个新的 Treenode

TreeNode action_compare1 = treeView1.Nodes[0].LastNode.Nodes[indx_tree1];

其中 indx_tree1 是一个整数,我知道选择了哪个节点,然后我将保存该节点。

我的目标是在保存选定节点(完成)后删除选定节点的第一个节点,然后将它们保存在新节点中。例如,假设 Node1 保存在名称为 First_node 的 TreeNode 中。然后我将从节点结构中删除 Node1 并将其所有 children 保存在一个新节点中(我不会在 Treeview 中显示),在这种情况下我将以下保存的节点作为新节点 First_node:

-node11
-node12
    -node121
    -node122

但是不知道怎么办?

更新:

好吧,也许答案很明确,但我不明白。然后假设我有他以下节点:

-Node1
    -node11
    -node12
        -node121
        -node122

现在我想将它的所有 children 提取到一个新节点中。我该怎么做?

根据我们在评论中的讨论,很明显,您需要 child 的节点集合中的 "deep copy"。

您可以通过调用给定节点的 Clone() 方法来完成此操作。

Read about it here

简而言之,您可以这样使用它:

TreeNode n=MyTreeView.Nodes[0];
var Node_and_SubNodes_of_given_Node = n.Clone();