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

时间:2013-05-03 10:16:24

标签: c# treeview

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

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

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

+ System - 70
        + Subsystem - 22
          Subsystem - 30
                       + Subsubsystem - 10

我需要能够点击'Subsubsystem'子节点并让我的listView与所有属于相应系统和子系统的文件一起弹出。例如,如果我点击上面树视图的子子系统10,我需要它返回属于System 70,Subsystem 30和Subsubsystem 10的所有文件。

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

显然,当我点击子系统10时,我的程序需要获取父节点才能返回属于相应系统和子系统的文件。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

使用树视图的afterselect事件。在TreeViewEventArgs中,有您当前的节点。该节点具有属性父级。

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

答案 1 :(得分:0)

您可以在TreeNode.Parent Property事件

上使用AfterSelect
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

获取父母

答案 2 :(得分:0)

我使用一个简单的循环来执行此操作

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

    }

它可以被大大清理,但总体思路有效。