【问题标题】:After adding a TreeNode to the .NET TreeView, it's IsExpanded property turns false, any idea why?将 TreeNode 添加到 .NET TreeView 后,它的 IsExpanded 属性变为 false,知道为什么吗?
【发布时间】:2010-03-06 12:55:13
【问题描述】:

我在表单上有一个 TreeView 控件。我正在向它动态添加新的 TreeNode,并且在添加它们之前我在它们上调用 Expand()。这会导致它们的 IsExpanded 属性为真。但是,在将其添加到 TreeView 或 TreeView 上的任何节点后,它的 IsExpanded 属性立即变为 false,并且没有任何节点被展开。谁能想到为什么会这样?在添加任何节点之前,我什至尝试在 TreeView 上调用 ExpandAll。是否必须在将 TreeNode 添加到 TreeView 或其现有子项之一之后调用此方法?

【问题讨论】:

    标签: .net visual-studio winforms visual-studio-2008


    【解决方案1】:

    似乎如果将 TreeNode 添加到 TreeView,并且没有为其分配任何子节点,则该节点的 IsExpanded 属性设置为 false。所以使用下面的代码:

    private void Form1_Load(object sender, 事件参数 e)

        {
            TreeNode node = new TreeNode();
            TreeNode cn1 = new TreeNode();
            TreeNode cn2 = new TreeNode();
            node.Text = "Hello";
            node.Nodes.Add(cn1);
            node.Nodes.Add(cn2);
            node.Expand();
            treeView1.Nodes.Add(node);
            bool expanded = node.IsExpanded;
        }
    

    我在此示例中发现,如果将 TreeNodes 添加为子节点,则 IsExpanded 属性在添加到 TreeView 之前和之后都保持为真。因此,请确保添加的节点具有子节点,否则 TreeNodeCollection.Add() 会将其更改为折叠状态。不知道这个为什么,但希望它是有帮助的。

    至于 ExpandAll(),你肯定要在所有子元素都被添加后调用它。我不确定,但我假设它只是递归地遍历每个节点的节点并调用“expand”,所以如果尚未添加要扩展的节点,则此函数将忽略它。

    【讨论】:

    • 谢谢你,它解释了很多。然而这很烦人。我正在尝试反序列化我保存的树视图,并且我有在他们的孩子之前反序列化的容器节点,这意味着我必须返回第二遍以在添加他们的孩子后重新展开它们?您还说我仍然需要调用 ExpandAll()?这是为什么? ExpandAll() 不会扩展树中的每个节点吗?这似乎违背了仅单独扩展您想要扩展的那些节点的目的。
    【解决方案2】:

    您应该在构建 TreeView 之后调用 ExpandAll。

    【讨论】:

    • ExpandAll() 不会展开所有子项吗?我有一些,当我创建它们时,IsExpanded 为假,有些为真。 ExpandAll() 会尊重这一点吗?如果是这样,它的名字是错误的。如果没有,那么我认为这不能解决我的问题。
    【解决方案3】:

    最近,我也遇到了这个问题,你可以看看下面的帖子,可能对你有帮助。 原因是尚未渲染树视图。你可以在渲染后做 TreeNode.Expand() 就可以了。

    treenode.IsExpanded still false after excute treenode.expand

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      相关资源
      最近更新 更多