【发布时间】:2020-08-28 23:41:14
【问题描述】:
我有一个父节点有一个孩子,这个孩子有另一个孩子等等。他们都在TreeView
所以我创建了一个全局变量来将我的所有节点保存为:
private TreeNodeCollection ProjectTreeView { get; set; }
然后我将树节点的数据设置到我的全局变量中:
ProjectTreeView = this.tvProjectList.Nodes[0].Nodes;
当我单击一个按钮时,我想过滤我的 TreeView,所以首先我清除 TreeView,然后我遍历集合并只显示满足我的条件的节点:
private void rdoIssued_Click(object sender, EventArgs e)
{
//blocks repainting tree till all objects loaded
this.tvProjectList.BeginUpdate();
this.tvProjectList.Nodes.Clear();
foreach (TreeNode projectNode in ProjectTreeView)
{
if (bool.Parse(projectNode.Tag.ToString().Split('|')[8]) == true)
{
this.tvProjectList.Nodes.Add((TreeNode)projectNode.Clone());
}
}
//enables redrawing tree after all objects have been added
this.tvProjectList.EndUpdate();
}
问题是它只克隆第一个节点而不是子节点。如何克隆一个包含所有子节点的节点?
【问题讨论】:
-
您需要递归地克隆每个节点。
Clone方法只创建一个浅拷贝。您是否尝试过不创建克隆?所有孩子都已附加到projectNode,如果您将其添加到树中,则应该跟随他们的父母。