【问题标题】:How to expand a new added node in TreeView如何在 TreeView 中展开新添加的节点
【发布时间】:2017-10-16 08:46:33
【问题描述】:

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

这是我的代码的 sn-p:

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

有什么建议吗?谢谢。

【问题讨论】:

    标签: c# .net winforms treeview


    【解决方案1】:

    你可以调用节点的EnsureVisible方法。它确保树节点可见,展开树节点并根据需要滚动树视图控件。

    例如:

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

    【讨论】:

      【解决方案2】:

      在从根到要展开的叶子的每个节点上使用 TreeNode.Expand(),在叶子节点或要展开的节点上使用 Expand 仅使节点本身显示其子子节点。 前任。根 -> nextnode1 -> somennode2 如果要扩展 truout somennode2,则应扩展其所有父节点(root.expand,nextnode1.expand,如果要扩展最后一个节点,则应扩展 somennode2.expand。

      【讨论】:

      • 你不需要手动展开所有的父节点,而是可以调用节点的EnsureVisible方法。它确保树节点可见,扩展树节点并根据需要滚动树视图控件,如this
      【解决方案3】:

      首先,感谢所有回答我的人。

      我找到了一个简单的解决方案:首先我构建了一个 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();
              }
          }
      }
      

      【讨论】:

      • 您尝试对上述代码执行的操作可以使用节点的EnsureVisible 方法简单地实现,就像我在答案中所做的那样。
      猜你喜欢
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多