Почему я вижу только последнее значение из списка в моем RichTextBox? - PullRequest
0 голосов
/ 06 декабря 2009

Почему этот код выводит только один элемент из списка?

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 ]

2 голосов
/ 06 декабря 2009

Вам нужно использовать

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 голосов
/ 06 декабря 2009

Каждый раз, когда исполняемый код входит в цикл 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 - очень эффективный класс для манипулирования строками без обычных штрафов памяти, что делает это с обычными строковыми классами. Кроме того, следующий код ниже (который очень похож на код 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 с помощью метода StringBuilder.Append () .

Тогда, конечно, вы могли бы еще раз изменить то, что появляется между выведенными числами. Я просто поставил пробел в ("").

Итак, чтобы ответить на ваш вопрос, появляется только один, потому что вы устанавливаете значение каждый раз, а не добавляете. Когда вы устанавливаете значение, предыдущее значение сбрасывается .

Надеюсь, я помог!

P.S. Просто увидел в вашем коде любопытную мелочь:

Tasks dosomething = new dosomething();

Вы уверены, что это не будет:

Tasks dosomething = new Tasks();

Но это не относится к вашему вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...