【问题标题】:Adding new line of data to TextBox向 TextBox 添加新的数据行
【发布时间】:2012-10-30 09:24:29
【问题描述】:

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

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

        }

【问题讨论】:

  • 我在创建一个简单的 TCP 聊天客户端时遇到了类似的问题。我的解决方案是在添加消息时检查行数,当超过某个阈值时删除最旧的行。我将其作为评论发布,因为它仍然非常低效,但它是简单添加的替代方法。
  • 我想过,但一定有更好的办法
  • 如果您考虑最简单的聊天应用程序,它们的工作原理几乎就是如此。甚至考虑像 AOL Instant Messenger 这样的聊天窗口也变得越来越长。基本相同的概念。

标签: c# .net winforms user-interface textbox


【解决方案1】:

C# - serialData 在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

【讨论】:

    【解决方案2】:

    我发现这种方法节省了很多打字,并避免了很多错别字。

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

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

    【讨论】:

    • 这个答案已经给出。除非您有什么要添加到该答案以使其变得更好,否则无需发布它。
    • 是的,保罗,答案已经给出。这只是另一种方式,
    【解决方案3】:

    如果您使用 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);
    
        }
    

    文本本身通常具有较低的内存占用(您可以在 f.ex. 10kb 内说很多,这就是“无”)。 TextBox 不会渲染缓冲区中的所有文本,只渲染可见部分,因此您无需过多担心延迟。较慢的操作是插入文本。附加文本相对较快。

    如果您需要对内容进行更复杂的处理,可以将StringBuilder 与文本框结合使用。这将为您提供一种非常有效的文本处理方式。

    【讨论】:

      【解决方案4】:

      以下是方法

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

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

        displayBox.Text += sent + Environment.NewLine;
        
      2. 从用户界面
        一)WPF

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

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

        b) Winform 文本框

        Set TextBox.MultiLine and TextBox.AcceptsReturn to true
        

      【讨论】:

      • 我使用的是 radTextBox,Environment.NewLine 在其中不起作用,但 \r\n 可以。这个答案涵盖了几种不同的方法,使其在各个方面都更有帮助。
      【解决方案5】:

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

      【讨论】:

      • 什么意思,我说C#是一种形式
      • 我也是用 C# 开发的,但是我不使用 windows 窗体 (winforms)。我使用 WPF 和 XAML。我还使用带有 HTML5 和 Javascript 的 MVC 开发了应用程序,这些应用程序利用 C# 作为业务逻辑。这些图形用户界面技术中的每一种都有不同的控件,您可以将其重新用于聊天窗口。
      • 我以为您在谈论 WinForms,但 Alan 是正确的,只是说 C# 表单有点模棱两可。您可能指的是 WinForm、WebForm、WPF……可以实现 C# 代码的表单不胜枚举。
      • 是的,当我说“你是什么意思”时,我实际上是真诚的。我不知道你在说什么。不过我现在明白了……谢谢
      • 好的。为了澄清起见,他现在将其标记为 WinForms。
      猜你喜欢
      • 2011-08-14
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2010-12-18
      • 2013-12-21
      相关资源
      最近更新 更多