2012-11-10 89 views
20

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

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

     } 
+2

我碰到类似的问题,创建一个简单的TCP聊天客户端。我的解决方案是只要在添加消息时检查行数,并在超过某个阈值时删除最早的行。我将它作为评论发布,因为它仍然非常低效,但它只是简单添加的替代方案。 –

+0

我想过,但必须有更好的方式 –

+1

如果您认为最简单的聊天应用程序几乎是如何工作的。即使考虑像AOL即时通讯聊天窗口这样的事情,也会持续变得越来越长。基本上是相同的概念。 –

回答

54

如果您使用的WinForms:

使用AppendText(myTxt)方法上代替(.net 3.5+)的TextBox

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

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

    } 

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

如果您需要更复杂的内容处理,可以使用StringBuilder与文本框结合使用。这会给你一个处理文本的非常有效的方式。

0

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

+0

你是什么意思,我说C#它的一种形式 –

+0

我也在C#中开发,但是我不使用Windows窗体(winforms)。我使用WPF和XAML。我还开发了使用MVC和HTML5和Javascript的应用程序,这些应用程序使用C#作为业务逻辑。这些图形用户界面技术中的每一种都有不同的控件,您可以将其重新用于聊天窗口。 – alan

+0

我假设你在谈论WinForms,但Alan是正确的,只是说C#表单有些含糊。你可能意味着WinForm,WebForm,WPF ...这个名单继承了可以实现C#代码的表单。 –

24

以下是如何

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

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

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

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

    按Enter键文本框和新的生产线将被创建

    B)的Winform文本框中

    Set TextBox.MultiLine and TextBox.AcceptsReturn to true 
    
+0

我正在使用radTextBox,Environment.NewLine不起作用,但\ r \ n确实如此。这个答案涵盖了几个不同的方法,使它更有帮助。 – Brad

0

我觉得这种方法可以节省很多打字的时间,并且可以防止很多拼写错误。

string nl =“\ r \ n”;

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

+1

已经给出这个答案。除非你有更多的东西可以添加到这个答案中来使它更好,否则不需要发布它。 –

+0

是的,保罗给出了答案。这只是另一种方式, – DanKuz