【问题标题】:Adding strings to a RichTextBox in C#在 C# 中将字符串添加到 RichTextBox
【发布时间】:2011-06-26 16:25:06
【问题描述】:

我目前有一个可以为 RichTextBox 设置值的函数,尽管您如何“添加”一个值或一个新行,而不是覆盖 RichTextBox 中的现有数据?

richTextBox2.Text = DateTime.Today + " Hello";

【问题讨论】:

  • James,我建议您使用单个 OpenId 登录,这样您就可以像往常一样使用the same user

标签: c# .net winforms richtextbox


【解决方案1】:
richTextBox2.AppendText(Environment.NewLine + DateTime.Today + " Hello"); 

【讨论】:

    【解决方案2】:
    richTextBox2.AppendText(String.Format("{0} the date is {1}{2}", "Hello", DateTime.Today, Environment.NewLine));
    

    请不要使用+

    【讨论】:

    • 为什么没有“+”?只是为了可读性?还是有其他原因?
    • @JosuaSchmid 字符串是不可变的。使用 + 链接其中的 n 个(特别是对于大字符串和/或许多连接)在内存中创建 n-1 个字符串,比最后一个大一个,导致(临时)内存浪费和大量计算开销。这就是为什么使用 String.Format() 和 StringBuilder-Class 来支持 +
    【解决方案3】:
    richTextBox2.Document.Blocks.Clear();
    richTextBox2.Document.Blocks.Add(new Paragraph(new Run("string")));
    

    【讨论】:

    • 用户要求的不是 WPF 的 winforms。
    【解决方案4】:

    我把它写成一个简单的日志到屏幕的东西,以通知用户后台发生的事情或确认各种操作。

    在表单上添加一个RichTextBox,这里我称之为“rtbLog”

    然后拨打以下电话并添加您的消息和您想要的任何可选格式。比如:

    DoWriteToLog("Hey, welcome!", true, Color.Green)
    
    
    public void DoWriteToLog(string strLogMessage, bool blnHighlighted = false, Color myFontColor = default(Color), bool blnNewLine = true)
            {
                string dtStamp = "[" + DateTime.Now.ToString("HH:mm:ss") + "] ";
                if (blnNewLine)
                    strLogMessage = dtStamp + strLogMessage + Environment.NewLine;
                if (blnHighlighted)
                {                
                    rtbLog.SelectionColor = myFontColor;             // Optional font color passed to method
                    if (strLogMessage.ToLower().Contains("help"))       // IF there is 'help' in the message, highlight it blue
                        rtbLog.SelectionBackColor = Color.LightBlue;
                    rtbLog.SelectionFont = new Font("Cambria", 10F, FontStyle.Bold, GraphicsUnit.Point);
                    rtbLog.AppendText(strLogMessage);                
                }
                else            
                    rtbLog.AppendText(strLogMessage);
                rtbLog.ScrollToCaret();
            }
    

    上面的 DoWriteToLog 语句将写“嘿,欢迎!”到粗体绿色字体的 RichTextBox。它还会为输入的每一行添加一个时间戳,但您可以通过关闭 blnNewLine 来避免这种情况。当然它是特定于我的使用,但您可以修改它以适合您的使用。

    我还有一个帮助“检测器”,因此如果我在屏幕上显示帮助消息,它会以特定颜色突出显示它,您可以根据需要评论/删除这两行。

    注意唯一需要的参数,当然是消息。这样,由于我经常使用它,因此我不必每次都添加所有参数,从而节省大量输入:-)

    【讨论】:

      【解决方案5】:
      richTextBox2.Text = "Something " + richTextBox2.Text + " and something"
      

      【讨论】:

      • @abatishchev 添加文本的功能不止一个,因此我认为您的解决方案行不通
      • 当控件中有大量文本时,这将非常低效
      • @David:答案中没有提到很多文字
      • 读取控件的全部内容只是为了添加另一行文本是非常低效的。为什么要不遗余力地编写低效的代码?
      • @David:RichTextBox.Text 属性是否读取整个控件内容而不是将其保存到变量中?我不知道。
      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 2023-01-19
      • 2010-09-18
      • 2018-06-03
      • 1970-01-01
      • 2018-01-08
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多