2013-06-05 59 views
0

我有一個沒有問題的樹狀視圖。從當前選定的樹形視圖的節點循環

是他們開始循環瀏覽當前所選節點上的節點而不是遍歷所有節點的方法嗎?

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

    } 
+0

如果選擇的節點是另一種的後代......它跳備份層次結構並回溯到每個連續的層?或者只是你正在使用的那個節點? – DonBoitnott

+0

我想讓它從選定的節點開始,並只向下鑽取與選定的關聯的子節點。因此,選定的節點將成爲最高的狗/ pardent節點,並且任何低於它的節點都將循環播放。 – JPJedi

+0

除非你知道深度(即它在某處被硬編碼並且不會改變),否則你需要一個遞歸循環來鑽取底部。在'currentNode.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. 
     } 
    } 
相關問題