【问题标题】:expamding one special node in treeview在树形视图中展开一个特殊节点
【发布时间】:2023-04-06 01:29:01
【问题描述】:

我有一个树视图节点,我只想扩展一个特殊节点。我知道通过写treeView1.ExpandAll() 它将扩展所有节点和子节点。但我的意思是这样的:

我也试过扭动这个命令,但它对树没有影响(!):

TreeNode lastNode = treeView1.Nodes[0].Nodes[treeView1.Nodes.Count - 1];
lastNode.Expand();

【问题讨论】:

    标签: c# .net winforms treeview treenode


    【解决方案1】:

    首先,确保您操作正确的节点。在您的示例中,treeView1.Nodes.Count 是 1(根节点),所以

    TreeNode lastNode = treeView1.Nodes[0].Nodes[treeView1.Nodes.Count - 1];
    

    翻译成

    TreeNode lastNode = treeView1.Nodes[0].Nodes[0];
    

    这不是你的本意。

    节点“动作”可以通过

    TreeNode lastNode = treeView1.Nodes[0].LastNode;
    

    其次,如果某些父节点没有展开,调用Expand是不够的。您需要像这样包含EnsureVisible 调用

    lastNode.Expand();
    lastNode.EnsureVisible();
    

    或者像这样手动展开节点及其所有父节点(你也可以做一个函数)

    for (var node = lastNode; node != null; node = node.Parent)
        node.Expand();
    

    【讨论】:

    • 非常感谢。我没有注意到这一点。这是一个聪明的提法。
    【解决方案2】:

    那是因为你的最后一个节点可能是你树中的最后一个节点——“Manipulieren (data)”下面没有文本的那个。 您需要的是树视图节点集合的Find 方法。

    treeview.Nodes.Find("KeyOfTheNode",includeChildren)

    includeChildren 告诉方法是只搜索顶级还是包含子节点。

    但是:您需要添加具有键值的节点!像这样:

    treeview.Nodes.Add("KeyOfTheNode", "TextOfTheNode")

    请记住:Find(string key, bool searchAllChildren)返回一个 TreeNode 数组。

    【讨论】:

    • 感谢您的回答。但我认为TreeNode lastNode = treeView1.Nodes[0].Nodes[treeView1.Nodes.Count - 1]; 指的是“行动”而不是“Manipulieren(数据)”。对吗?
    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 2020-04-22
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2011-11-10
    相关资源
    最近更新 更多