2011-01-15 26 views

cevap

15

Bir kök düğüme sahip bir ağacınız varsayarsak, aşağıdaki kod her zaman ağaç düğümlerini en derinlere kadar döngüden geçirir, ardından bir düzey geri gider. Her düğümün metnini basacaktır. Krumelur cevabı

TreeNode oMainNode = oYourTreeView.Nodes[0]; 
PrintNodesRecursive(oMainNode); 

public void PrintNodesRecursive(TreeNode oParentNode) 
{ 
    Console.WriteLine(oParentNode.Text); 

    // Start recursion on all subnodes. 
    foreach(TreeNode oSubNode in oParentNode.Nodes) 
    { 
    PrintNodesRecursive(oSubNode); 
    } 
} 
6

Güncellemesi (kafamın üstünden Test edilmemiş) (bu his/her çözümün 2 ilk satırları değiştirin): Her ihtimale karşı

foreach (var node in oYourTreeView.Nodes) 
{ 
    PrintNodesRecursive(node); 
} 
+0

Evet, o zaman, eğer çeşitli kökler varsa, tüm alt temaları tükürecektir. Ama gerçekten: birkaç düğüm olan bir ağaç gerçekten nadiren doğada :-) Oh, ve "onun";) – Krumelur

+0

Aslında, doğada bu oldukça yaygın bir phaenommena :) Programlamada birkaç senaryo hayal edebiliyorum yararlı olduğu yerde. Örneğin: bir şirketin alt departmanlarını içeren, vb. Muhtemelen herhangi bir süper bölümün olmayacak. – dzendras

+0

Haklısınız. Cevabımı ayarladık. Bir yazım hatası oldu. – Krumelur

6

Tembel LINQ yaklaşımı sen Şunun gibi bir şey arıyoruz:

12

İki ardışık genişletme yöntemi kullanabilirsiniz. Sen myTreeView.GetAllNodes() veya myTreeNode.GetAllNodes() çağırabilir ya: TreeView pek çok seviyesi vardır Çünkü

public static List<TreeNode> GetAllNodes(this TreeView _self) 
{ 
    List<TreeNode> result = new List<TreeNode>(); 
    foreach (TreeNode child in _self.Nodes) 
    { 
     result.AddRange(child.GetAllNodes()); 
    } 
    return result; 
} 

public static List<TreeNode> GetAllNodes(this TreeNode _self) 
{ 
    List<TreeNode> result = new List<TreeNode>(); 
    result.Add(_self); 
    foreach (TreeNode child in _self.ChildNodes) 
    { 
     result.AddRange(child.GetAllNodes()); 
    } 
    return result; 
} 
-1

, özyinelemeli fonksiyon yapın:

foreach (TreeNode actualNode in treeView1.Nodes)   // Begin with Nodes from TreeView 
    { 
     AddNodeAndChildNodesToList(actualNode); 
    } 
: TreeView tüm ilk kademe Düğümler için bu işlevi çağırmak daha

public void AddNodeAndChildNodesToList(TreeNode node) 
    { 
     listBox1.Items.Add(node.Text); // Adding current nodename to ListBox  

     foreach (TreeNode actualNode in node.Nodes) 
     { 
      AddNodeAndChildNodesToList(actualNode); // recursive call 
     } 
    } 

Kodu şuradan siteye C# TreeView

1

Eğer d Düğüm anahtarının benzersiz olması gerekmiyor, sadece düğüm düğmelerinin tümünü boş bir dizeye ("") ayarlayın, daha sonra bir TreeView içindeki tüm düğümleri döndürmek için Treeview1.Nodes.Find("", true); yapabilirsiniz.

İlgili konular