从最后一个子节点到根节点递归删除treenode

时间:2014-10-21 11:14:06

标签: c# dictionary children treenode

我有一个TreeView在应用程序启动时为空。节点是动态添加的,对于每个节点,我将其标签放入字典中。

现在,如果我有许多长节点的节点,并且我从字典中删除了根节点及其标签,那么子节点标签当然会保留在字典中。

所以我尝试了这个:

foreach(TreeNode tn in treeView.SelectedNode.Nodes)
{
    dictionary.Remove((string)tn.Tag); // remove all respective keys
}
dictionary.Remove((string)treeView.SelectedNode.Tag); // remove the selected node's key
treeView.Nodes.Remove(treeView.SelectedNode); // remove the selected node itself

但这只会删除所选节点和第一个子节点。有没有办法递归地执行此操作,从树的顶部到根,以便每个键都被保存删除?

1 个答案:

答案 0 :(得分:1)

//add new method

private void DeleteDictionaryEntries(TreeNode tn)
{
    foreach(TreeNode child in tn.Nodes)
       DeleteDictionaryEntries(child);
    dictionary.Remove((string)tn.Tag);
}

//in your method
DeleteDictionaryEntries(treeView.SelectedNode);
treeView.Nodes.Remove(treeView.SelectedNode); // remove the selected node itself