如何为TreeView中的某些节点而不是所有节点设置图像?

Sim*_*mon 20 .net c# treeview winforms

我有一个TreeViewWindows窗体控件ImageList,我希望一些节点显示图像,但其他节点没有图像.

希望图像应该是空白区域.我希望图像看起来像TreeView在没有ImageList时会绘制的线条.如何在不诉诸这种笨拙的黑客的情况下,为某些项目而不是其他项目绘制图像?

Joh*_*her 12

您需要设置ImageIndex,并SelectedImageIndex为一个数字,比数值在数较高ImageList.例如,如果您创建此节点并将其添加到您的TreeView:

TreeNode node1 = new TreeNode(string.Empty, 12, 12); // imageList1.Count = 5
Run Code Online (Sandbox Code Playgroud)

你将有一个隐形TreeNode插入你的TreeView.我改变了我的背景颜色,TreeView它仍然是看不见的.

(我用谷歌搜索了一段时间,我最终找到了答案:http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.windowsforms/2006-09/msg00322.html)

  • 这是MS在某处记录的吗?我会谨慎使用这种技术,因为听起来像是在未来版本的框架中可能无法兼容的那种东西. (2认同)

Mtn*_*ris 9

我选择做的是为那些TreeView不应该有图像的节点使用点图像.

带有图像点的TreeNode

我将此图像添加为列表中的最后一个图像,如果该项目不应该有图像我将其设置为 ImageList.Images.Count-1


Mar*_*own 8

我尝试了一次,我认为不可能.

如果你试图同时设置ImageKeyImageIndex以"未设置"值控制只是默认ImageIndex为0下面的代码:

treeView.ImageKey = "Value";
Debug.WriteLine(treeView.ImageIndex);
treeView.ImageKey = null;
Debug.WriteLine(treeView.ImageIndex);
treeView.ImageIndex = -1;
Debug.WriteLine(treeView.ImageIndex);
Run Code Online (Sandbox Code Playgroud)

产生输出:

-1
0
0
Run Code Online (Sandbox Code Playgroud)

这种方式告诉您控件开发人员希望确保始终存在默认图像.那只是让你害怕的黑客选择.


小智 8

我发现在TreeView上使用StateImageList而不是ImageList只会在TreeNode上的StateImageIndex等于或大于0时显示图像

  • 这似乎工作得很好。 (2认同)