0

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

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

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

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

我需要能够单击“子子系统”子节点并让它在我的 listView 中填充属于相应系统和子系统的所有文档。因此,例如,如果我要单击上面树视图的子系统 10,我需要它返回系统 70、子系统 30 和子系统 10 的所有文档。

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

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

有任何想法吗?

4

3 回答 3

4

使用树视图的 afterselect 事件。在 TreeViewEventArgs 中,有您当前的节点。该节点有一个属性 parent。

private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    e.Node.Parent
}
于 2013-05-03T10:21:02.303 回答
1

你可以TreeNode.Parent PropertyAfterSelect活动中使用

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

于 2013-05-03T10:24:15.280 回答
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;

    }

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

于 2015-01-29T01:03:04.603 回答