2017-02-02 14 views
1
private void treeView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    // Get the node that was clicked 
    TreeNode selectedNode = treeView1.HitTest(e.Location).Node; 

    if (selectedNode != null) 
    { 

    } 
} 

如果我有例如根節點:我怎樣才能得到一個TreeView子選擇節點,但也是上述節點?

World 

當我點擊它,我看到這些節點:

World 
|____ Blue 
|____ Green 
|____ Red 
|____ Black 
|____ yellow 

如果我在點擊我會看到更多的節點藍色例如

World 
|____ Blue 
| |____ Day 
| |____ Night 
|____ Green 
|____ Red 
|____ Black 
|____ yellow 

現在,如果我點擊藍色,我將得到所選的節點名稱藍色selectedNode.Name

如果我點擊將在selectedNode.Name日獲得 但我想要做的是,如果我點擊selectedNode藍\日或BlueDay

如果在還有另一個節點名稱和我這樣的selectedNode.Name我想看看BlueDay1或我喜歡藍\日\ 1

我想這\\這樣我就可以把它作爲一個目錄點擊名稱。 問題是我使用的selectedNode.Name作爲一個目錄來獲取文件:

List<string> ff = new List<string>(); 
private void treeView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    TreeNode selectedNode = treeView1.HitTest(e.Location).Node; 

    if (selectedNode != null) 
    { 
     string tt = mainPath + "\\" + selectedNode.Text; 
     ff = DirSearch(tt); 
     timer1.Enabled = true; 
    } 
} 

如果我點擊藍色然後它的罰款,將得到所有藍下的文件,包括子目錄。但是,如果我在1點擊和有1文件,然後,因爲我需要的完整路徑名藍\日\ 1從1

拿到文件,也不會得到任何文件,這是我是如何在獲得這些文件

static List<string> DirSearch(string sDir) 
{ 
    List<string> files = new List<string>(); 
    try 
    { 
     foreach (string d in Directory.GetDirectories(sDir)) 
     { 
      foreach (string f in Directory.GetFiles(d)) 
      { 
       files.Add(f); 
      } 
      DirSearch(d); 
     } 
    } 
    catch (System.Exception excpt) 
    { 
     Console.WriteLine(excpt.Message); 
    } 
    return files; 
} 

的想法是,如果我想獲得的所有藍下我點擊藍色的文件,但如果我想,當我點擊1只得到1文件它,因爲1不工作是不是完整的路徑。

+0

題外話,但使用'AfterSelect'事件,而不是'MouseClick'。 –

回答

1

每個TreeNode都有一個FullPath,它獲取從根樹節點到當前樹節點的路徑。例如,你可以看到所有節點的完整路徑,樹像下面的樹:

Tree    Full Path 
============================== 
1     1 
|__ 11    1\11 
    |__ 111   1\11\111 
    |__ 112   1\11\112 

有一個PathSeparator字符TreeView它獲取或設置樹節點路徑使用分隔字符串,這是\默認。

如果您想對路徑有更多的控制權,可以使用AncestorsAncestorsAndSelf擴展方法。

在我下面提供我創建的路徑,而不根節點的例子:

var pathWithoutRootNode = string.Join(@"\", 
    e.Node.AncestorsAndSelf().Where(x => x.Parent != null).Select(x => x.Text)) 
+0

沒有屬性祖先和自己的節點。我應該從哪裏得到它或如何使用它?嚴重\t代碼\t說明\t項目\t文件\t線\t抑制狀態 錯誤\t CS1061 \t「樹節點」不包含「AncestorsAndSelf」,沒有擴展方法的定義「AncestorsAndSelf」接受型「樹節點」的第一個參數可以發現(你錯過了使用指令或程序集引用?) –

+1

我已經發布了['AncestorsAndSelf'](http://stackoverflow.com/a/39805732/3110834)方法的答案。這是我寫的[這裏]的擴展方法(http://stackoverflow.com/a/39805732/3110834)。 –

+0

我將TreeViewExtensions添加到我的代碼中,並刪除了靜態我收到錯誤,如果它是靜態的。但仍然在事件AfterSelect這個祖先和自己不存在:e.Node.AncestorsAndSelf() –

相關問題