Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Iterate through all nodes of a treeView Control. C#

I am selecting all controls I have in a form

if controls are Treeviews, I'll iterate all nodes they have

I need something like: (And it is my code)

foreach (Control c in PanelSM.Controls)
{
    if (c is TreeView) 
    {    
        TreeNodeCollection myNodes = c.Nodes;//<<<<< Here is a mistake
        foreach (TreeNode n in myNodes)
        {
            String text = rm.GetString(n.Name);
            //And more things
            //...
            //...
            //...
       }
    }
    //...
}

Any idea?

Thank You

like image 375
Jean Avatar asked Nov 27 '22 21:11

Jean


2 Answers

You need to use recursion. A method like this should suffice

IEnumerable<TreeNode> Collect(TreeNodeCollection nodes)
{
    foreach(TreeNode node in nodes)
    {
        yield return node;

        foreach (var child in Collect(node.Nodes))
            yield return child;
    }
}

Then in your method you can just do

 foreach (var node in Collect(tree.Nodes))
 {
     // you will see every child node here
 }
like image 171
Darren Kopp Avatar answered Nov 29 '22 11:11

Darren Kopp


It's pretty easy:

void TraverseTree(TreeNodeCollection nodes)
{
    foreach (var child in nodes)
    {
        DoSomethingWithNode(child);
        TraverseTree(child.Nodes);
    }
}

And call it with:

TraverseTree(MyTreeView.Nodes);
like image 32
Jim Mischel Avatar answered Nov 29 '22 11:11

Jim Mischel