【问题标题】:Controlling images of nodes in a TreeView控制 TreeView 中节点的图像
【发布时间】:2010-04-04 02:17:35
【问题描述】:

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

【问题讨论】:

  • 这是 wpf 还是 winforms?

标签: c# treeview


【解决方案1】:

我在这里假设您只想更改在选择给定节点时显示的 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(带有子节点):但这不会选择它。双击当然会同时展开和选择。

【讨论】:

    【解决方案2】:

    我认为你必须保持对最后一个节点的引用展开,这样你以后可以更改它

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 2010-11-25
        相关资源
        最近更新 更多