2013-05-03 184 views
0

我有一个树形视图,当文档加载到我的程序中时,它将以编程方式生成。C#treeView,当用户单击子节点时如何获得父节点

我树状看起来是这样的:

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

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

我需要能够点击“Subsubsystem”子节点上,并把它poplulate我的ListView有属于各自的系统和子系统的所有文件。例如,如果我点击上面treeview的Subsubsystem 10,我需要它返回所有属于System 70,Subsystem 30和Subsubsystem 10的文档。

我正在努力的是知道如何获得Subsubsystem 10的父节点时,我点击它。

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

任何想法?

回答

3

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

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

你可以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."; 
    } 
} 

使用TreeNode.Parent Property或者你也可以从treeView1.SelectedNode.Parent

+0

谢谢你们,我发现了.fullpath方法,它几乎让我想要什么,但我需要节点键/名称来重新启动,而不是文本。你知道怎么做吗?? – Daedalus 2013-05-03 11:08:06

+0

当你绑定数据时,你可以用你想要的东西来设置'TreeNode.Tag'属性 – Damith 2013-05-04 04:41:23

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; 

    } 

它可以清理显着,但一般的想法的作品。

相关问题