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