2013-09-07 5 views
0

Я пытался выяснить, но это настолько сложно, поэтому я хотел бы спросить, так как я не мог получить ответДобавление узлов TreeView В Для/ForEach Loop

CheckForIllegalCrossThreadCalls = false; 
     FolderBrowserDialog fbd = new FolderBrowserDialog(); 
     if(fbd.ShowDialog() == DialogResult.OK) 
     { 
      Thread t = new Thread(() => StartListing(fbd.SelectedPath)); 
      SplittedPath = fbd.SelectedPath.Split(Path.DirectorySeparatorChar); 
      t.Start();    
      foreach(string s in SplittedPath) 
      { 
       if(treeView1.Nodes.Count > 0) 
       { 
        treeView1.Nodes[i].Nodes.Add(s); 
        i++; 
        treeView1.Nodes[i].ImageIndex = 0; 
       } 
       else 
       { 
        treeView1.Nodes.Add(s); 
        treeView1.Nodes[0].ImageIndex = 0; 
       } 
      } 
     } 

Вот мой код. SplittedPath строка обычно кажется good.It имеет все расщепляется вещами, но в цикле ForEach, похоже, есть только 2 string.When удаляют

if(treeView1.Nodes.Count > 0) 
      { 
       treeView1.Nodes[i].Nodes.Add(s); 
       i++; 
       treeView1.Nodes[i].ImageIndex = 0; 
      } 
      else 
      { 
       treeView1.Nodes.Add(s); 
       treeView1.Nodes[0].ImageIndex = 0; 
      } 

This коды, он просто работает fine.When добавить их к ForEach цикл, он просто не добавляет все строки SplittedPath. Любое решение?

+0

Что вы пытаетесь сделать? – ppetrov

+0

Если я выбираю «C: \ Users \ The Cowboy \ Desktop \ Socket Server», я хочу добавить узел «C:», а затем добавить к нему дочерний узел «Пользователи», а потом дочерний узел «The Cowboy» ... Думаю, ты понял, что я имею в виду. –

+0

Да, я понимаю, теперь вы должны обновить свой вопрос тем, что вы сказали. О том, что у вас есть итеративное и рекурсивное решение вашей проблемы, с какой именно проблемой вы столкнулись? – ppetrov

ответ

0

Вы не имеете дело с древовидной структурой в своем коде, поэтому она не работает. Здесь у вас всего 2 уровня.

Если вы хотите дерево презентации вашего пути вы должны сделать следующее:

TreeNode n = null; 
TreeNode parent = null; 
foreach(string s in SplittedString) 
{ 
    if (parent == null) 
    { 
     parent = new TreeNode(s); 
     treeview1.Nodes.Add(parent); 
     continue; 
    } 

    n = new TreeNode(s); 
    parent.Nodes.Add(n); 
    parent = n; 
} 

Я не говорю, что это лучший способ сделать это, но у вас есть общее представление о итерационном решении.

Вы получаете ссылку на родительский узел, и по мере прохождения вашего пути родительский элемент изменяется на последний добавленный узел. Таким образом, каждый string s будет находиться на другом уровне вашей древовидной структуры.

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