如何将项目从树视图传输到富文本框



我用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。

我哪里做错了?

你正在做的是,对于每个根>子对,你正在写TextBox末尾的值。这将在 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
    }
}

有很多方法可以做到这一点,但这里有一种方法,它应该相当直接(如果你理解递归)。

最新更新