我有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
执行节点的浅层复制)。
请解释一下,在这种情况下如何获得正确的副本?
答案 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);
}
这使您可以完全控制复制标签数据的方式。