добавление новой строки данных в textbox

<p>я делаю чат-клиент, и в настоящее время у меня есть кнопка, которая будет отображать данные в многострочном текстовом поле при нажатии. это единственный способ добавить данные в многострочное текстовое поле? я чувствую, что это крайне неэффективно, потому что, если разговор становится очень длинным, строка тоже будет очень длинной.</p><pre><code>private void button1\_click(object sender, eventargs e) { string sent = chatbox.text; displaybox.text += sent + "\r\n"; } </code></pre>

<p>если вы используете winforms:</p><p>вместо этого используйте метод <code>appendtext(mytxt)</code> в <code>textbox</code> (.net 3.5+):</p><pre><code> private void button1\_click(object sender, eventargs e) { string sent = chatbox.text; displaybox.appendtext(sent); displaybox.appendtext(environment.newline); } </code></pre><p>текст сам по себе, как правило, занимает мало места в памяти (вы можете многое сказать, например, в 10 кб, что является «ничем»). textbox отображает не весь текст в буфере, а только видимую часть, поэтому вам не нужно слишком беспокоиться о задержке. более медленные операции вставки текста. добавление текста происходит относительно быстро.</p><p>если вам нужна более сложная обработка содержимого, вы можете использовать <code>stringbuilder</code> в сочетании с текстовым полем. это даст вам очень эффективный способ обработки текста.</p>

<p>ниже приведены способы</p><ol> <li><p>из кода (как вы упомянули) -></p> <pre><code>displaybox.text += sent + "\r\n"; </code></pre> <p>или же</p> <pre><code>displaybox.text += sent + environment.newline; </code></pre></li> <li><p>из пользовательского интерфейса<br> а) wpf</p> <pre><code>set textwrapping="wrap" and acceptsreturn="true" </code></pre> <p>нажмите клавишу ввода в текстовое поле и новая строка будет создана</p> <p>б) winform текстовое поле </p> <pre><code>set textbox.multiline and textbox.acceptsreturn to true </code></pre></li> </ol>

<p>поскольку вы не указали, какой интерфейс (технологию gui) вы используете, было бы сложно дать конкретную рекомендацию. в wpf вы можете создать список и для каждой новой строки чата добавить новый элемент списка в конец коллекции. эта <a href="http://www.pcreview.co.uk/forums/implement-chat-window-via-winforms-t1324368.html">ссылка</a> дает некоторые советы о том, как вы можете достичь того же результата в среде winforms.</p>

<p>c # - serialdata является <code>receivedeventhandler</code> в <code>textbox</code>.</p><pre><code>serialport sdata = sender as serialport; string recvdata = sdata.readline(); serialdata.invoke(new action(() => serialdata.text = string.concat(recvdata))); </code></pre><p>теперь visual studio отбрасывает мои строки. у textbox, конечно, были все правильные опции.</p><p>последовательный порт:</p><pre><code>serial.print(rnd); serial.( '\n' ); //carriage return </code></pre>

<p>я считаю, что этот метод экономит много печатать и предотвращает много опечаток.</p><p>строка nl = "\ r\n";</p><p>txtoutput.text = "первая строка" + nl + "вторая строка" + nl + "третья строка";</p>