2013-06-05 4 views
0

문제없이 잘 구성된 트리보기가 있습니다.현재 선택한 트리보기의 노드를 반복합니다.

현재 선택한 노드의 노드를 모두 반복하는 대신 루프를 반복하는 방법이 있습니까?

TreeNodeCollection nodes = treeView.Nodes; 
    foreach (TreeNode n in nodes) 
    { 

    } 
+0

선택된 노드가 다른의 후손 인 경우 ... 그것은 홉 무엇을 계층 구조를 백업하고 모든 연속적인 계층으로 다시 드릴 업 하시겠습니까? 아니면 네가있는 노드의 자식 노드 일 뿐이야? – DonBoitnott

+0

선택한 노드에서 시작하게하고 선택한 노드와 연결된 하위 노드로만 드릴 다운합니다. 따라서 선택된 노드는 최상위 dog/Pardent 노드가되고 그 아래의 모든 노드는 반복됩니다. – JPJedi

+0

깊이를 알고 있지 않으면 (즉, 어딘가에 하드 코딩되어 변경되지 않을 경우) 아래쪽으로 드릴하는 재귀 루프가 필요합니다. 'theCurrentNode.Nodes'를 통해 반복되는 일련의 루프입니다. – DonBoitnott

답변

0

이 작업을 수행하기 위해 확장 방법을 사용할 수 있습니다

public static class TreeViewEx 
{ 
    public static List<TreeNode> GetAllNodes(this TreeNode Node) 
    { 
     List<TreeNode> list = new List<TreeNode>(); 
     list.Add(Node); 
     foreach (TreeNode n in Node.Nodes) 
     list.AddRange(GetAllNodes(n)); 
     return list; 
    } 
} 

이처럼 사용

TreeNode node = myTree.SelectedNode; 
List<TreeNode> list = node.GetAllNodes(); 

나는 반환 List은 (시작 노드를 포함 할 것이라는 점을 지적해야 당신이 원래 선택한 것). 이것은 그들이 아이들이 있다면 당신이보고 각각의 자식 노드를 확인해야 올바른 방향으로 머리에게 도움이 될 수

0

:

TreeView treeView = new TreeView(); 
    TreeNode parentNode = treeView.SelectedNode; 

    if (parentNode.GetNodeCount(true) > 0) 
    { 
     foreach (TreeNode childNodes in parentNode.Nodes) 
     { 
      //// do stuff with nodes. 
     } 
    } 
관련 문제