c# treeView,当用户单击子节点时,我如何获得父节点

本文关键字:何获得 父节点 单击 treeView 用户 子节点 | 更新日期: 2023-09-27 18:12:03

我有一个当文档加载到我的程序时以编程方式生成的树视图。

我的树视图看起来像这样:

+ System - 65
        + Subsystem - 32
          Subsystem - 68
                       + Subsubsystem - 01
                         Subsubsystem - 02
+ System - 70
        + Subsystem - 22
          Subsystem - 30
                       + Subsubsystem - 10

我需要能够单击"子子系统"子节点,并让它填充我的listView与属于各自的系统和子系统的所有文档。例如,如果我点击上面树视图的子子系统10,我需要它返回系统70、子系统30和子子系统10的所有文档。

我正在努力的是知道如何获得子子系统10的父节点,当我点击它。

显然,当我单击子子系统10时,我的程序需要获得父节点,以便返回属于各自系统和子系统的文档。

任何想法?

c# treeView,当用户单击子节点时,我如何获得父节点

使用treeview的afterselect事件。在TreeViewEventArgs中,有你当前的节点。该节点有一个父属性。

private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    e.Node.Parent
}

您可以在AfterSelect事件上使用TreeNode.Parent Property

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{  
   if(e.Node.Parent!= null && 
     e.Node.Parent.GetType() == typeof(TreeNode) )
   {
      // do something with e.Node.Parent
   }
   else
   {
     //"No parent node.";
   }
}

或者您可以从treeView1.SelectedNode.Parent

获取父节点

我使用一个简单的循环来完成这个

    private TreeNode[] GetParentNodes(TreeNode node_)
    {
        TreeNode[] nodes_ = new TreeNode[node_.Level +1];
        nodes_[0] = node_;
        for (int i = 1; i < nodes_.Length; i++)
        {
            nodes_[i] = nodes_[i -1].Parent;
        }
        return nodes_;
    }

,并从

树的click事件(在我的例子中是右键)调用它
private void treeView1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            processClick(e);
        }
    }
    private void processClick(System.Windows.Forms.MouseEventArgs e)
    {
        System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y);
        TreeNode node = treeView1.GetNodeAt(p);
        treeView1.SelectedNode = node;
    }

它可以被显著地清理,但总的想法是有效的