为什么我只能看到RichTextBox中List的最后一个值?

时间:2009-12-06 07:57:37

标签: c# winforms

为什么这段代码只从列表中输出一个元素?

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个浮点数。

2 个答案:

答案 0 :(得分:2)

您需要使用

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(); 

答案 1 :(得分:0)

每次运行代码进入foreach循环时,

richTextBox1.Text = num.ToString();

清除richTextBox1并将num.ToString()插入其中。下次执行该foreach循环中的代码时,内容将再次替换

我认为您在此处尝试追加结果。有很多方法可以做到这一点。例如,您可以轻松地将之前的语句重构为:

richTextBox1.Text += num.ToString();

请注意 + =运算符:+ =表示附加到。因此,richTextBox1.Text = richTextBox1.Text + num.ToString();

当然,您还可以添加空格以使其看起来漂亮......

richTextBox1.Text += num.ToString()+" ";

或者,正如旁观者所说,你可以使用StringBuilder 。 StringBuilder是一个非常有效的类,用于操作字符串而不需要使用常规字符串类来执行此操作。此外,下面的代码(与astander的代码非常相似,因为它们本质上以相同的方式起作用)仅更新用户界面上的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.Append()方法附加到StringBuilder。

然后,当然,您可以再次更改输出浮动之间出现的内容。我只是在(“”)中放了一个空格。

因此,要回答您的问题,只会出现一个,因为您每次都要设置值,而不是追加。设置值时,将丢弃先前的值

希望我帮忙!

P.S。刚刚在代码中看到一个奇怪的小东西:

Tasks dosomething = new dosomething();

你确定它不会是:

Tasks dosomething = new Tasks();

但这与你的问题无关。