2017-02-02 1 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 

Теперь, если я нажму на Blue, я получу выбранное имя узла Blue. selectedNode.Name будет Синего

И если я нажимаю на день получит в selectedNode.Nameдень Но то, что я хочу сделать, что если я нажимаю на деньselectedNode быть Синего \ Day или 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, то он не получит никаких файлов, так как мне нужно полное имя пути Blue \ Day \ 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

Off темы, но использовать 'AfterSelect' событие вместо' MouseClick'. –

ответ

1

Каждый TreeNode имеет FullPath, который получает путь от узла корневого дерева до текущего узла дерева. Например, вы можете увидеть полный путь всех узлов для дерева, как показано ниже дерева:

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

Существует PathSeparator иероглифа TreeView который получает или задает строку разделителя, что путь дерева узла использует, который \ по умолчанию ,

Если вы хотите получить больше контроля над дорогой, вы можете использовать методы расширения Ancestors или AncestorsAndSelf.

В примере, приведенном ниже я я создал путь без корневого узла:

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

Нет собственности AncestorsAndSelf of Node. Где я могу получить его или как его использовать? Тяжесть \t Код \t Описание \t Проект \t файла \t Line \t Подавление Государственный Ошибка \t CS1061 \t «TreeNode» не содержит определения для «AncestorsAndSelf» и никакого расширения метода «AncestorsAndSelf» принимать первый аргумент типа «TreeNode» можно найти (вам не хватает директивы использования или ссылки на сборку?) –

+1

Я отправил ссылку на метод ['AncestorsAndSelf'] (http://stackoverflow.com/a/39805732/3110834) в ответ. Это метод расширения, который я написал [здесь] (http://stackoverflow.com/a/39805732/3110834). –

+0

Я добавил TreeViewExtensions в свой код и удалил статические ошибки, если они статичны. Но все же в случае AfterSelect this AncestorsAndSelf не существует: e.Node.AncestorsAndSelf() –

Смежные вопросы