Color a node of treeview with different color

user5814565 picture user5814565 · Feb 2, 2016 · Viewed 15.4k times · Source

I have a treeview with some nodes. Under some condition I want to color each node with different color along with their children. I have written a function that colors node and its children.

Will anyone please let me know is there any possibility that I have Color.Green as a variable such that I wont write the whole function for each color? I mean as an input parameter in function.

Here is the function:

public void ColorChild(TreeNode nodes, int indx)
{
    foreach (TreeNode node_tmp in nodes.Nodes[indx].Nodes)
    {
       System.Drawing.Color = Green;
       node_tmp.ForeColor = color;
       foreach (TreeNode node_tmp2 in node_tmp.Nodes)
       {
          node_tmp2.ForeColor = Color.Green;
          foreach (TreeNode node_tmp3 in node_tmp2.Nodes)
          {
             node_tmp3.ForeColor = Color.Green;
             foreach (TreeNode node_tmp4 in node_tmp3.Nodes)
             {
                node_tmp4.ForeColor = Color.Green;
                foreach (TreeNode node_tmp5 in node_tmp4.Nodes)
                {
                   node_tmp5.ForeColor = Color.Green;
                }
             }
          }
      }
   }
}

Answer

Zippy picture Zippy · Feb 2, 2016

You could use recursion to iterate through all your nodes.

Something like:

void ColorNode(TreeNodeCollection nodes, System.Drawing.Color Color)
{

    foreach (TreeNode child in nodes)
    {
        child.ForeColor= Color;
        if(child.Nodes != null && child.Nodes.Count>0)
          ColorNode(child.Nodes, Color);
    }
}

And call it from you method like:

public void ColorChild(TreeNode nodes, int indx)
{
   ColorNode(nodes.Nodes, Color.Green);
}