我动态生成一个树形目录后,想在每个节点前添加图标。
添加之前先判断,这个节点是否有子节点,如果有则添加一种图标,如果没有,则添加另外一种图标。
我的程序如下:(事先在imagelist1中放了两个图标)
treeView1.Imagelist = imagelist1;
foreach(TreeNode node in treeView1.Nodes)
{
     if(node.Nodes.Count>0)
        {
            node.ImageIndex=0;
        }
     else
        {
            node.ImageIndex=1;
        }
}
但是程序运行后,所有节点就只显示索引为0的图标,不知道为什么,望高手指点!

解决方案 »

  1.   

    代码有错误。
    foreach(TreeNode node in treeView1.Nodes)
    上面这个循环只能遍历到第一级节点,应该使用递归的方法,不难。 
      

  2.   

    另外最好设置一下SelectedImageIndex属性
      

  3.   

    node.ImageIndex = 1;
    再设置node.ImageKey这个属性=你的资源图片名称
      

  4.   

    treeView1.Imagelist = imagelist1; 
    SetIcon(treeView1.Nodes[0]);
    ...
    private void SetIcon(TreeNode tn)
    {
      foreach(TreeNode node in tn.Nodes) 
      { 
        if(node.Nodes.Count>0) 
            { 
                node.ImageIndex=0; 
                SetIcon(node);
            } 
        else 
            { 
                node.ImageIndex=1; 
            } 
       } 
    }这样就是递归,当然,TreeView的第一层子节点只有一个,作为整棵树的根节点的时候,这个代码比较有效,否则的话,就要来一次遍历了。
      

  5.   


    感谢这位高人!
    代码已经运行,而且效果很好!
    但是对这条语句不太明白SetIcon(treeView1.Nodes[0]);
    它和SetIcon(node);究竟是什么关系?可否详细说明一下?
    谢谢!
      

  6.   

    但是对这条语句不太明白SetIcon(treeView1.Nodes[0]); 
    它和SetIcon(node);究竟是什么关系?可否详细说明一下? 
    -------------------------------------------
    第一条,启动调用过程,不论是不是递归完成的,这是必要的调用。
    第二条,就是完成递归的关键,自己调用自己,只是在调用的参数上发生变化。这些是程序设计的基础,希望能找些数据结构之类的书籍巩固一下。
      

  7.   

    查了一下msdn,这么说:
    TreeView.Nodes Property
    Gets the collection of tree nodes that are assigned to the tree view control.
    应该是包括所有的节点,而不管层次。可按照楼主的代码看,只是第一层节点。我测试了一下,的确只包括第一层节点,该死的msdn。其实,TreeView.Nodes包括所有节点才是合理的,因为TreeView.TopNode.Nodes可以得到第一层所有节点。TreeView缺少一个全部节点的集合。
      

  8.   

    TreeView.Nodes如果包括所有节点的话,就无法分清层次了,TreeView的意义何在?
    TreeView.TopNode是最高位置的可见节点,并不是任何时候都是根节点。
      

  9.   

    我自己的“因为TreeView.TopNode.Nodes可以得到第一层所有节点。”是不对的。不过,得到一棵树的所有节点还是有用的,即使没有层次。起码,对楼主就有用,不用递归。我刚刚使用了
    treeveiw,就恨不得有一个总集合。