我的表单中有一个TreeView
,我需要以编程方式添加一个关于粒子鼠标事件的新节点。然后我需要将树扩展到新添加的节点。我尝试在新添加的节点上调用函数Expand()
,但我不起作用。
这是我的代码片段:
TreeNodeCollection tree = treeViewProtocolli.Nodes["Radice"].Nodes["ModBus"].Nodes;
if (tree != null)
{
TreeNode node = new TreeNode();
node.Text = "MBRTU";
node.Name = "MBRTU";
node.Tag = "BASE";
node.ForeColor = System.Drawing.Color.Red;
tree.Add(node);
TreeNode skBase = treeViewProtocolli.Nodes["Radice"].Nodes["ModBus"].Nodes["MBRTU"];
if(skBase != null)
{
TreeNode sknode = new TreeNode();
sknode.Text = nome + " -> [Slave = " + slave + " | Indirizzo = " + indirizzo +
" | Funzione = " + funzione + " | Abilitato = " + abil + " | Lunghezza blocco = " + lunghezza + "]";
sknode.Name = "MBRTU";
skBase.Nodes.Add(sknode);
sknode.Expand();
}
}
有什么建议吗?感谢。
答案 0 :(得分:1)
在从根目录到要扩展的叶子的每个节点上使用TreeNode.Expand()
,使用叶子节点上的展开或要展开的节点,仅使节点本身显示其子子节点。
恩。 root - > nextnode1 - > somennode2
如果你想扩展truout somennode2,你应该扩展它的所有parrent节点(root.expand,nextnode1.expand,如果你想要你最后一个节点扩展somennode2.expand。
答案 1 :(得分:1)
您可以调用节点的EnsureVisible
方法。它确保树节点可见,扩展树节点并根据需要滚动树视图控件。
例如:
var node = treeView1.Nodes[0].Nodes[0].Nodes.Add("something");
node.EnsureVisible();
答案 2 :(得分:1)
首先,感谢所有回答我的人。
我找到了一个简单的解决方案:首先我构建一个List
来展开所需的所有父节点,然后我向后浏览列表以展开每个TreeNode。这是我的代码。
private void OpenTree(TreeNode node)
{
List<TreeNode> parents = new List<TreeNode>();
parents.Add(node); // Add the actual node to expand
TreeNode actPa = node;
do
{
actPa = actPa.Parent;
if (actPa != null)
parents.Add(actPa); // Add all the parent node
}
while (actPa != null);
if(parents.Count > 0)
{
for(int iRep = parents.Count - 1; iRep >= 0; iRep --)
{
parents[iRep].Expand();
}
}
}