使用对象标记复制TreeView节点

时间:2015-07-09 18:58:45

标签: c# treeview clone

我有TreeView。其TreeNodes的{​​{1}}属性类型为TreeNode.Tag。它包含字段InfoForNode,其中存储有关节点的所有信息。

现在我要复制此节点(包含public DataGridViewRow[] Properties的所有属性)并将其粘贴到同一Node.Tag中。我尝试使用TreeView方法:

TreeNode.Clone()

它可以工作,但复制的和原始节点指向foreach (var node in TreeQuery.SelectedNodes) { _copiedNodes.Add((TreeNode)node.Clone()); } 的同一个实例(因为它的引用类型和DataGridViewRow[] Properties执行节点的浅层复制)。

请解释一下,在这种情况下如何获得正确的副本?

1 个答案:

答案 0 :(得分:1)

最简单的方法是手动执行此操作。

        foreach (var node in TreeQuery.SelectedNodes)
        {
            TreeNode newNode = (TreeNode)node.Clone();
            DataGridView[] oldProperties = (DataGridView[])node.Tag;
            DataGridView[] newProperties = new DataGridView[oldProperties.Length];
            for(int i = 0; i < oldProperties.Length; i++)
            {
                newProperties[i] = oldProperties[i].Clone(); //or whatever copy method works for this
            }
            _copiedNodes.Add(newNode);
        }

这使您可以完全控制复制标签数据的方式。