C# 如何在TreeView中扩展新添加的节点
我的表单中有一个C# 如何在TreeView中扩展新添加的节点,c#,.net,winforms,treeview,C#,.net,Winforms,Treeview,我的表单中有一个TreeView,我需要以编程方式在particolar鼠标事件上添加一个新节点。然后我需要将树扩展到新添加的节点。我尝试在新添加的节点上调用函数Expand(),但不起作用 这是我的代码片段: TreeNodeCollection tree = treeViewProtocolli.Nodes["Radice"].Nodes["ModBus"].Nodes; if (tree != null) { TreeNode node = new TreeNode();
TreeView
,我需要以编程方式在particolar鼠标事件上添加一个新节点。然后我需要将树扩展到新添加的节点。我尝试在新添加的节点上调用函数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();
}
}
有什么建议吗?谢谢。在从根节点到要展开的叶节点的每个节点上使用TreeNode.Expand()
,在叶节点上使用Expand或要展开的节点仅使节点本身显示其子节点。
例如root->nextnode1->somennode2
如果要展开TROUT somennode2,则应展开其所有相关节点(root.expand,nextnode1.expand,如果要展开最后一个节点somennode2.expand。可以调用node方法。它确保树节点可见,展开树节点并根据需要滚动树视图控件
例如:
var node = treeView1.Nodes[0].Nodes[0].Nodes.Add("something");
node.EnsureVisible();
首先,感谢所有回答我的人 我找到了一个简单的解决方案:首先我构建一个
列表
,其中包含要展开的所需节点的所有父节点,然后我向后浏览列表以展开每个树节点。这是我的代码
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();
}
}
}
私有void OpenTree(TreeNode节点)
{
列表父项=新列表();
parents.Add(node);//添加要展开的实际节点
TreeNode actPa=节点;
做
{
actPa=actPa.父母;
如果(actPa!=null)
parents.Add(actPa);//添加所有父节点
}
while(actPa!=null);
如果(parents.Count>0)
{
对于(int-iRep=parents.Count-1;iRep>=0;iRep--)
{
父项[iRep]。展开();
}
}
}
您不需要手动展开所有父节点,而是可以调用节点方法。它可以确保树节点可见,展开树节点并根据需要滚动树视图控件,如所示。您可以使用节点的EnsureRevible
方法简单地实现上述代码的操作,如我在我没有回答。