在树视图中展开一个特殊节点

expamding one special node in treeview

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

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

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

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

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

其中 includeChildren 告诉该方法是只搜索顶级还是包括子节点。

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

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

并记住:Find(string key, bool searchAllChildren)returns TreeNode 数组。

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

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

转换为

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

这不是你的本意。

可以使用

检索节点"actions"
TreeNode lastNode = treeView1.Nodes[0].LastNode;

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

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

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

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