C#treeView,当用户单击子节点时,如何获取父节点

C#treeView,当用户单击子节点时,如何获取父节点,c#,treeview,C#,Treeview,我有一个treeview,当文档加载到我的程序中时,它是通过编程生成的 我的treeview看起来像这样: + System - 65 + Subsystem - 32 Subsystem - 68 + Subsubsystem - 01 Subsubsystem - 02 + System - 70 + Subsystem - 22

我有一个treeview,当文档加载到我的程序中时,它是通过编程生成的

我的treeview看起来像这样:

+ System - 65
        + Subsystem - 32
          Subsystem - 68
                       + Subsubsystem - 01
                         Subsubsystem - 02

+ System - 70
        + Subsystem - 22
          Subsystem - 30
                       + Subsubsystem - 10
我需要能够单击“Subsubsystem”子节点,并让它使用属于相应系统和子系统的所有文档来弹出我的listView。例如,如果我点击上面树视图的子系统10,我需要它返回所有属于系统70、子系统30和子系统10的文档

我正在努力解决的一点是,当我点击子系统10时,知道如何获取子系统10的父节点

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


有什么想法吗

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

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

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

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

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

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

获取父级。您可以在
AfterSelect
事件上使用
TreeNode.parent属性

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_;
    }

可以对其进行显著的清理,但总体思路是可行的。

我使用一个简单的循环来完成此操作

    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_;
    }

它可以被显著地清理,但总体思路是有效的。

谢谢大家,我找到了.fullpath方法,它几乎满足了我的需要,但我需要重新连接节点键/名称,而不是文本。你知道怎么做吗?当你绑定数据时,你可以用你想要的设置
TreeNode.Tag
属性。伙计们,我找到了.fullpath方法,它几乎可以满足我的需要,但我需要重新连接节点键/名称,而不是文本。你知道怎么做吗?当你绑定数据时,你可以用你想要的设置
TreeNode.Tag
属性。我们可以假设这是提供了解决方案的,而不是。我们可以假设这是提供了解决方案的。