我动态生成一个树形目录后,想在每个节点前添加图标。
添加之前先判断,这个节点是否有子节点,如果有则添加一种图标,如果没有,则添加另外一种图标。
我的程序如下:(事先在imagelist1中放了两个图标)
treeView1.Imagelist = imagelist1;
foreach(TreeNode node in treeView1.Nodes)
{
if(node.Nodes.Count>0)
{
node.ImageIndex=0;
}
else
{
node.ImageIndex=1;
}
}
但是程序运行后,所有节点就只显示索引为0的图标,不知道为什么,望高手指点!
添加之前先判断,这个节点是否有子节点,如果有则添加一种图标,如果没有,则添加另外一种图标。
我的程序如下:(事先在imagelist1中放了两个图标)
treeView1.Imagelist = imagelist1;
foreach(TreeNode node in treeView1.Nodes)
{
if(node.Nodes.Count>0)
{
node.ImageIndex=0;
}
else
{
node.ImageIndex=1;
}
}
但是程序运行后,所有节点就只显示索引为0的图标,不知道为什么,望高手指点!
foreach(TreeNode node in treeView1.Nodes)
上面这个循环只能遍历到第一级节点,应该使用递归的方法,不难。
再设置node.ImageKey这个属性=你的资源图片名称
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的第一层子节点只有一个,作为整棵树的根节点的时候,这个代码比较有效,否则的话,就要来一次遍历了。
感谢这位高人!
代码已经运行,而且效果很好!
但是对这条语句不太明白SetIcon(treeView1.Nodes[0]);
它和SetIcon(node);究竟是什么关系?可否详细说明一下?
谢谢!
它和SetIcon(node);究竟是什么关系?可否详细说明一下?
-------------------------------------------
第一条,启动调用过程,不论是不是递归完成的,这是必要的调用。
第二条,就是完成递归的关键,自己调用自己,只是在调用的参数上发生变化。这些是程序设计的基础,希望能找些数据结构之类的书籍巩固一下。
TreeView.Nodes Property
Gets the collection of tree nodes that are assigned to the tree view control.
应该是包括所有的节点,而不管层次。可按照楼主的代码看,只是第一层节点。我测试了一下,的确只包括第一层节点,该死的msdn。其实,TreeView.Nodes包括所有节点才是合理的,因为TreeView.TopNode.Nodes可以得到第一层所有节点。TreeView缺少一个全部节点的集合。
TreeView.TopNode是最高位置的可见节点,并不是任何时候都是根节点。
treeveiw,就恨不得有一个总集合。