Что вы делаете, так это то, что для каждой пары 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
}
}
Есть много способов сделать это, но вот один из способов, и это должно быть довольно прямо вперед (если вы понимаете рекурсии).