控制TreeView中节点的图像

时间:2010-04-03 13:24:13

标签: c# treeview

我正在尝试使用TreeView控件创建文件夹资源管理器。现在,我添加了一个带有两个图像的ImageList - 一个用于文件夹,另一个用于选定文件夹。我使用'BeforeExpand'事件来更改当前节点(文件夹)的图标。问题是,当用户选择其他文件夹时,我不知道如何更改它...我可以使用哪个事件?也许我不正确使用它??

3 个答案:

答案 0 :(得分:3)

我假设您只想更改选择给定节点时显示的TreeNode图像。而且我不打算在这里讨论为每个带有子节点的TreeNode显示'文件夹图标的问题:我想如果你掌握了这里发生了什么,你就可以添加(第三个)图像并“执行正确的事情是“使文件夹显式化:然后你可以扩展它,如果你愿意,所以带有”无子节点“的节点可以有不同的图标用于选择/未选择。

(1使用两个图像将ImageList添加到表单中:索引为#0的图像将是默认(未选中)的TreeNode图像。

(2将AfterSelect事件处理程序添加到TreeView:将其图像更改为“选定”图像。

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        e.Node.SelectedImageIndex = 1;
    }

您将注意到,当所选节点发生变化时:先前选择的TreeNode图像将自动恢复为使用其默认图像(ImageList中的索引#0)。

注意:在这里区分扩展TreeView中的TreeNode和在TreeView中选择TreeNode很重要:您可以通过单击“+”图标展开任何TreeNode(带子节点):但不会选择它。当然,双击将展开和选择。

答案 1 :(得分:0)

我认为您必须保留对最后一个节点的引用,以便稍后进行更改

答案 2 :(得分:0)

嗯我不知道我是否理解正确但实际上,在文件夹资源管理器上下文中,如果用户展开另一个节点,则不需要对之前扩展的节点执行任何特定操作。如果用户再次单击它,则可以使用BeforeCollapse事件将其更改回来。它会满足你的需求吗?