Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在TreeView中扩展新添加的节点_C#_.net_Winforms_Treeview - Fatal编程技术网

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
方法简单地实现上述代码的操作,如我在我没有回答。