2014-11-20 52 views
0

我嘗試使用:如何獲取TreeView中所有節點的索引?

TreeNode node = TreeView1.FindNode() 

但只找到根節點。它無法找到子節點。

我想所有節點的指標之後,我想通過索引使用上面的代碼中找到節點並勾選。

我嘗試使用foreach通過所有節點進行迭代,但我不能夠找到子節點和索引。

我使用Visual Studio 2013年

+0

是的。添加了缺少的標籤。 – RKh 2014-11-20 17:22:20

回答

2

下面的方法可以讓你通過一個樹遍歷:

public static IEnumerable<T> Traverse<T>(
    this IEnumerable<T> source 
    , Func<T, IEnumerable<T>> childrenSelector) 
{ 
    var stack = new Stack<T>(source); 
    while (stack.Any()) 
    { 
     var next = stack.Pop(); 
     yield return next; 
     foreach (var child in childrenSelector(next)) 
      stack.Push(child); 
    } 
} 

使用這個你可以寫:

var allNodes = new[]{root}.Traverse(node => node.Nodes); 

然後,您可以做無論你想要的是整棵樹中所有節點的序列,並隨你做他們想做的事情。

+0

什麼是?它是TreeNode節點嗎? – RKh 2014-11-20 17:31:30

+0

@RKh這是一個通用的論點。它可以是你想要的任何東西。該方法可以遍歷*任何*樹,而不僅僅是'TreeNode'實例。 – Servy 2014-11-20 17:32:28

+0

因此,對於TreeView,我會傳遞什麼? TreeView名稱或任何類型? – RKh 2014-11-20 17:35:48