为什么我只能看到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(); 
+0

感谢您的答案和提示 – 2009-12-06 08:05:35

每次运行的代码进入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(); 

但是,这不涉及您的问题。