在树视图中展开一个特殊节点
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();
我有一个树视图节点,我只想展开一个特殊节点。我知道写 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();