2013-05-03 61 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; 

    } 

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

相關問題