Есть ли другой способ добавить текст в элемент управления Textbox? - PullRequest
1 голос
/ 18 февраля 2010

У меня есть пользовательский каркас записи в System.Windows.Forms.TextBox.Теперь я пишу в TextBox следующим образом:

tbLog.Text += newLogEntry.Text;

Проблема этого подхода состоит в том, что каждый раз, когда он выполняется, строки из tbLog.Text и newLogEntry.Text объединяются, а затемназначен на tbLog.Text.По мере роста журнала в TextBox операция становится очень интенсивной и все более медленной.

Есть ли способ сделать это быстрее и эффективнее?

Ответы [ 3 ]

3 голосов
/ 18 февраля 2010

TextBox имеет функцию AppendText(). Вы должны использовать это вместо этого, потому что он работает намного лучше, чем оператор +=.

1 голос
/ 18 февраля 2010

Лично я бы сделал всю работу внутри StringBuilder, используя сначала .Append ().Затем я бы установил текстовое свойство textbox, используя метод .ToString () в StringBuilder.

1 голос
/ 18 февраля 2010

«Проблема» заключается в том, что добавление строки в другую строку каждый раз приводит к появлению новой строки. Это может быть довольно дорого, если вы делаете много конкатов.

На вашем месте я бы не входил напрямую в TextBox. Я бы просто отслеживал все сообщения журнала и использовал текстовое поле для визуализации журнала. Таким образом, вы можете, например, выбрать сохранение журнала в текстовый файл или выбрать другой способ визуализации журнала.

Например, вы можете хранить сообщения в StringCollection или List<String>. Вместо того, чтобы визуализировать его в текстовом поле, вы можете использовать ListBox, например, и каждый раз, когда вы добавляете новый элемент в журнал, вы можете добавлять новый элемент в ListBox. Но я хотел бы убедиться, что это не тесно связано. Ваш класс журнала может инициировать событие, например, каждый раз, когда новое сообщение сохраняется в журнале. После этого вы можете иметь разных «наблюдателей», которые следят за журналом, подписываясь на события и предпринимая соответствующие действия каждый раз, когда событие возникает.

...