57

我正在做一个聊天客户端,目前我有一个按钮,单击时将数据显示到多行文本框。这是向多行文本框添加数据的唯一方法吗?我觉得这是非常低效的,因为如果对话变得很长,字符串也会变得很长。

private void button1_Click(object sender, EventArgs e)
        {
            string sent = chatBox.Text;
            displayBox.Text += sent + "\r\n";

        }
4

5 回答 5

109

如果您使用 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将其与文本框结合使用。这将为您提供一种非常有效的文本处理方式。

于 2012-11-10T07:48:46.203 回答
46

以下是方法

  1. 从代码(你提到的方式) - >

    displayBox.Text += sent + "\r\n";
    

    或者

    displayBox.Text += sent + Environment.NewLine;
    
  2. 从 UI
    a) WPF

    Set TextWrapping="Wrap" and AcceptsReturn="True"   
    

    按 Enter 键进入文本框,将创建新行

    b) Winform 文本框

    Set TextBox.MultiLine and TextBox.AcceptsReturn to true
    
于 2012-11-10T03:56:27.343 回答
2

我发现这种方法节省了大量的打字,并防止了很多错别字。

字符串 nl = "\r\n";

txtOutput.Text = "第一行" + nl + "第二行" + nl + "第三行";

于 2018-02-23T15:05:05.787 回答
0

因为您没有指定您使用的前端(GUI 技术),所以很难做出具体的推荐。在 WPF 中,您可以创建一个列表框,并为每一行新的聊天添加一个新的列表框项到集合的末尾。此链接提供了一些关于如何在 winforms 环境中实现相同结果的建议。

于 2012-11-10T03:35:31.623 回答
0

C# - serialDataReceivedEventHandlerTextBox.

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
于 2018-09-25T16:31:04.657 回答