C# 如何将项目从treeview传输到richtextbox?
我用foreach来解决这个问题。我从未遇到过错误。但它发送的项目是错误的 我想这样做:根:1,2,3和子节点:a,b,c,d,e,f。RichTextBox的外观如下:1->a->b->2->c->d->3->e->f 代码如下: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 (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
有很多方法可以实现这一点,但这里有一种方法,它应该是相当直接的(如果您理解递归的话)