C# 如何将项目从treeview传输到richtextbox?

C# 如何将项目从treeview传输到richtextbox?,c#,foreach,treeview,richtextbox,C#,Foreach,Treeview,Richtextbox,我用foreach来解决这个问题。我从未遇到过错误。但它发送的项目是错误的 我想这样做:根: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) {

我用foreach来解决这个问题。我从未遇到过错误。但它发送的项目是错误的

我想这样做:根: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->b2->c2->d3->e3->f


我哪里做错了?

您所做的是,对于每个根->子对,您正在将该值写入
文本框的末尾。这将在for循环的每次迭代中为您提供1->a | 1->b | 2->c | 2->d | 3->e | 3->f。当您移除管道并合并所有迭代时,您将得到1->a1->b2->c2->d3->e3->f,正如您发布的那样。(这可以通过逐步调试找到)

更好的选择是先将
TreeView
转换为字符串,然后将其添加到
TextBox
。你的问题就是一个很好的例子。首先需要创建一个方法将树转换为字符串,然后将该字符串写入文本框。这还可以处理具有两个以上深度的
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
    }
}
私有字符串TreeViewToString(treeviewtv,字符串分隔符){
var result=新的StringBuilder();
foreach(tv.Nodes中的TreeNode节点){
遍历节点(节点、分隔、结果);
}
if(result.Length
有很多方法可以实现这一点,但这里有一种方法,它应该是相当直接的(如果您理解递归的话)