2014-10-21 2 views
0

응용 프로그램 시작시 비어있는 TreeView가 있습니다. 노드는 동적으로 추가되며 각 노드에 대해 태그를 사전에 넣습니다.마지막 하위 노드에서 루트로 재귀 적으로 treenodes를 제거하십시오.

이제 노드의 긴 분기가 많고 사전에서 루트 노드와 해당 태그를 삭제하면 물론 자식 노드 태그도 사전에 남아있게됩니다.

그래서 나는이 시도 :

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

왜 사전이 필요합니까? – Reniuz

+0

@ Reenuz 트리가 일종의 대화 구조를 나타 내기 때문에 분명히 어떤 노드가 생성되고 사용자가 삭제했는지 추적 할 수 있습니다. 사전의 각 키에는 관련 입/출력 정보가 ​​들어 있습니다. – betaFlux

+1

그래서 당신의 사전은 나무의 거울입니까? 그렇다면 왜 노드 관련 데이터를 노드 태그에 저장하지 않을까요? – Reniuz

답변

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 
+0

매력처럼 작동합니다! 감사! – betaFlux

관련 문제