我正在做一个聊天客户端,目前我有一个按钮,可以在点击时将数据显示到多行文本框。这是将数据添加到多行文本框的唯一方法吗?我认为这是非常低效的,因为如果谈话变得非常长,那么字符串也将变得非常长。
private void button1_Click(object sender, EventArgs e)
{
string sent = chatBox.Text;
displayBox.Text += sent + "\r\n";
}
答案 0 :(得分:76)
如果您使用WinForms:
使用AppendText(myTxt)
上的TextBox
方法代替(.net 3.5 +):
private void button1_Click(object sender, EventArgs e)
{
string sent = chatBox.Text;
displayBox.AppendText(sent);
displayBox.AppendText(Environment.NewLine);
}
文本本身通常具有较低的内存占用(你可以在f.ex. 10kb中说很多,这是“没有”)。 TextBox不会渲染缓冲区中的所有文本,只渲染可见部分,因此您不必过多担心滞后。较慢的操作是插入文本。附加文本相对较快。
如果您需要更复杂的内容处理,可以将StringBuilder
与文本框结合使用。这将为您提供一种非常有效的文本处理方式。
答案 1 :(得分:32)
以下是方式
从代码(您提到的方式) - >
displayBox.Text += sent + "\r\n";
或
displayBox.Text += sent + Environment.NewLine;
来自用户界面 a)WPF
Set TextWrapping="Wrap" and AcceptsReturn="True"
按Enter键进入文本框,将创建新行
b)Winform文本框
Set TextBox.MultiLine and TextBox.AcceptsReturn to true
答案 2 :(得分:0)
因为您没有指定您正在使用的前端(GUI技术),所以很难提出具体的建议。在WPF中,您可以创建一个列表框,并为每个新的聊天行添加一个新的listboxitem到集合的末尾。这个link提供了一些关于如何在winforms环境中获得相同结果的建议。
答案 3 :(得分:0)
我发现这种方法可以节省大量的输入,并且可以防止很多错别字。
string nl =" \ r \ n";
txtOutput.Text ="第一行" + nl +"第二行" + nl +"第三行&#34 ;;
答案 4 :(得分:0)
C#-serialData在ReceivedEventHandler
中是TextBox
。
SerialPort sData = sender as SerialPort;
string recvData = sData.ReadLine();
serialData.Invoke(new Action(() => serialData.Text = String.Concat(recvData)));
现在Visual Studio删除了我的台词。当然,TextBox上具有所有正确的选项。
序列号:
Serial.print(rnd);
Serial.( '\n' ); //carriage return