2017-10-16 81 views
3

我的表单中有一个TreeView,我需要以编程方式在particolar鼠标事件上添加一个新节点。然后我需要将树扩展到新添加的节点。我尝试在新添加的节点上调用功能Expand(),但我不起作用。如何在TreeView中扩展新增节点

这是我的代码片段:

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

什么建议吗?谢谢。

回答

1

可以。调用节点的EnsureVisible方法,它可以确保树节点是可见的,扩大树节点和滚动必要的树视图控件

例如:。

var node = treeView1.Nodes[0].Nodes[0].Nodes.Add("something"); 
node.EnsureVisible(); 
1

使用TreeNode.Expand()从根到想要展开的叶的每个节点上,使用叶节点上的展开或要展开的节点仅使节点本身显示其子节点。 ex。根 - > nextnode1 - > somennode2 如果你想扩展truout somennode2你应该扩大它的所有parrent节点(root.expand的nextnode1.expand如果你想你的最后一个节点扩展somennode2.expand

+0

你并不需要手动展开所有的父母,而不是你可以调用['EnsureVisible'](https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode .ensurevisible(v = vs.110).aspx)节点的方法。它确保树节点可见,展开树节点并根据需要滚动树视图控件,如[this](https://stackoverflow.com/a/46768089/3110834)。 –

1

首先,感谢所有那些谁回答我。

我找到了一个简单的解决方案:首先我构建一个List与desidered节点的所有父级展开,然后我向后浏览列表以展开每个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(); 
     } 
    } 
} 
+0

你正在尝试使用上面的代码可以简单地通过使用节点的EnsureVisible方法来实现,就像我在答案中所做的一样。 –

相关问题