为什么我只能看到RichTextBox中列表的最后一个值?
为什么这段代码只能从列表中输出一个元素?为什么我只能看到RichTextBox中列表的最后一个值?
private void button3_Click(object sender, EventArgs e)
{
Tasks dosomething = new dosomething();
dosomething.calculate();
foreach(float num in dosomething.Display())
{
richTextBox1.Text = num.ToString();
}
}
凡dosomething.Display()
返回一个List<float> list;
10彩车。
您需要使用
richTextBox1.Text += num.ToString();
通过你在做什么,只有最后一个项目将被显示出来。
一种更好的方式是使用一个StringBuilder
StringBuilder sb = new StringBuilder();
foreach (float num in dosomething.Display())
{
sb.Append(num.ToString() + Environment.NewLine);
}
richTextBox1.Text = sb.ToString();
每次运行的代码进入foreach循环的,
richTextBox1.Text = num.ToString();
清除richTextBox1并插入num.ToString()进入它。下一次执行该foreach循环中的代码时,内容将再次被替换为。
我认为你正试图追加结果在这里。有很多方法可以做到这一点。例如,你可以很容易地重构,以前声明:
richTextBox1.Text += num.ToString();
注意+ =运算符:+ =手段追加。因此,richTextBox1.Text = richTextBox1.Text + num.ToString();
当然,你还可以添加空白,使其看起来很漂亮......
richTextBox1.Text += num.ToString()+" ";
或者,如astander建议,你可以使用StringBuilder。一个StringBuilder是一个非常高效的类,它可以处理字符串,而不会像普通的字符串类那样使用普通的内存处罚。此外,下面的代码(这与代表者的代码非常相似,因为它们实质上以相同的方式运行)只更新用户界面上的richTextBox1一次,而不是一次列表中的每个元素。
的StringBuilder代码:
StringBuilder sbuilder = new StringBuilder(); //default StringBuilder() constructor
foreach (float num in dosomething.Display())
{
sb.Append(num.ToString() + " ");
}
//Foreach loop has ended - this means all elements of the list have been iterated through
//Now we set the contents of richTextBox1:
richTextBox1.Text = sb.ToString();
注意,在foreach循环,我们追加到StringBuilder,通过StringBuilder.Append()方法。
然后,当然,你可以再次改变输出的浮点数之间的内容。我只是在(“”)中放置一个空格。
所以,回答你的问题,只有一个出现,因为你是每次设置值,而不是追加。当您设置一个值时,先前的值将被丢弃。
希望我帮了忙!
P.S.刚看到一个奇怪的小东西在你的代码:
Tasks dosomething = new dosomething();
你确定它不会是:
Tasks dosomething = new Tasks();
但是,这不涉及您的问题。
感谢您的答案和提示 – 2009-12-06 08:05:35