2017-10-16 193 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方法來實現,就像我在答案中所做的一樣。 –

相關問題