winforms 向TextBox添加新行数据

8fq7wneg  于 2022-11-17  发布在  其他
关注(0)|答案(6)|浏览(424)

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

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

        }
gjmwrych

gjmwrych1#

如果您使用WinForms:
请改用TextBox上的AppendText(myTxt)方法(.net 3.5+):

private void button1_Click(object sender, EventArgs e)
    {
        string sent = chatBox.Text;

        displayBox.AppendText(sent);
        displayBox.AppendText(Environment.NewLine);

    }

文本本身通常占用的内存很小(比如10kb内的很多内容都是空的)。TextBox并不渲染缓冲区中的所有文本,只渲染可见部分,所以你不必太担心延迟。较慢的操作是插入文本。追加文本相对较快。
如果你需要一个更复杂的内容处理,你可以使用StringBuilder和文本框的组合,这将给予你一个非常有效的文本处理方式。

jljoyd4f

jljoyd4f2#

方法如下
1.从代码(你提到的方式)-〉

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

displayBox.Text += sent + Environment.NewLine;

1.从UI
a)WPF

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

在文本框中按Enter键,将创建新行
B)Winform文本框

Set TextBox.MultiLine and TextBox.AcceptsReturn to true
oxiaedzo

oxiaedzo3#

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

string nl = "\r\n";

txtOutput.Text = "First line" + nl + "Second line" + nl + "Third line";
iqjalb3h

iqjalb3h4#

我使用这个函数来保持最新的在顶部:

WriteLog("hello1");
WriteLog("hello2");
WriteLog("hello3");

public void WriteLog(string text)
{
    var last = txtLog.Text;
    txtLog.Text = DateTime.Now.ToString("G") + ": " + text;
    txtLog.AppendText(Environment.NewLine);
    txtLog.AppendText(last);            
}

将输出以下内容:

au9on6nz

au9on6nz5#

因为你还没有指定你使用的前端(GUI技术),所以很难给出具体的建议。在WPF中,你可以创建一个列表框,并为聊天的每一个新行添加一个新的列表框项到集合的末尾。这个link提供了一些建议,告诉你如何在winforms环境中获得同样的结果。

4zcjmb1e

4zcjmb1e6#

C# -序列数据是TextBox中的ReceivedEventHandler

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

相关问题