如何在TreeView中展开新添加的节点

时间:2017-10-16 08:46:33

标签: c# .net winforms treeview

我的表单中有一个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();
    }
}

有什么建议吗?感谢。

3 个答案:

答案 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();
        }
    }
}