2017-01-14 3 views
0

Я использовал foreach для решения этой проблемы. Я никогда не сталкивался с ошибкой. Но он отправляет элементы неправильно.Как перенести элементы из дерева в richtextbox?

Я хочу сделать это так: roots: 1,2,3 и дочерние узлы: a, b, c, d, e, f. RichTextBox будет выглядеть так: 1-> a-> b-> 2-> c-> d-> 3-> e-> f.

вот код:

foreach (TreeNode root in treeView1.Nodes) 
     { 

      foreach (TreeNode child in root.Nodes) 
      { 
       richTextBox1.SelectedText = (root.Text + "->" + child.Text); 
      } 


     } 

Но это выглядит следующим образом: 1-> a1-> В2> С2-> d3-> e3-> е.

Где я делаю неправильно?

ответ

0

Что вы делаете, так это то, что для каждой пары root-> child вы записываете это значение в конец TextBox. Это даст вам 1-> a | 1-> b | 2-> c | 2-> d | 3-> e | 3-> f на каждой итерации в вашем цикле for. Когда вы удаляете трубы и объединяете все итерации, вы получаете 1-> a1-> b2-> c2-> d3-> e3-> f, как вы писали. (Это можно было бы найти с шагом отладки).

Лучше всего преобразовать TreeView в строку сначала, а затем добавить ее в TextBox. Ваша проблема - прекрасный пример использования Recursion. Сначала вам нужно сделать способ преобразования дерева в строку, а затем записать эту строку в текстовое поле. Это также обрабатывает TreeView с более чем двумя глубинами.

private string TreeViewToString(TreeView tv, string delimiter) { 
    var result = new StringBuilder(); 

    foreach (TreeNode node in tv.Nodes) { 
     TraverseNodes(node, delimited, result); 
    } 

    if (result.Length < delimiter.Length) { 
     return result.ToString(); 
    } else { 
     return result.ToString(0, result.Length - delimiter.Length); 
    }    
} 

// recursive part 
private void TraverseNodes(TreeNode node, string delimiter, StringBuilder result) { 
    result.AppendFormat("{0}{1}", node.Text, delimiter);  // add node to string 

    foreach (TreeNode subNode in node.Nodes) { 
     TravserseNodes(subNode, delimiter, result);   // recurse into nodes children 
    } 
} 

Есть много способов сделать это, но вот один из способов, и это должно быть довольно прямо вперед (если вы понимаете рекурсии).

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