【问题标题】:RichTextBox does not constantly update when used as text status displayRichTextBox 用作文本状态显示时不会不断更新
【发布时间】:2012-03-15 11:22:25
【问题描述】:

我正在尝试使用 RichTextBox 作为状态显示,但每次我附加到 RichTextBox 的文本时它都不会更新。每次添加新文本时,常规的多行文本框都会更新,但我更喜欢使用 RichTextBox。是否需要设置某种属性才能查看更新?

更新: 另外,每显示一条消息,我如何自动使其向下滚动?

就像我说的,如果我用 TextBox 替换 RichTextBox,我可以看到正在写出的每一行消息,并且它还会自动向下滚动到底部以显示最新添加的文本。

void UpdateStatus(string textMessage)
{
  if (InvokeRequired)
  {
    BeginInvoke(new MethodInvoker(() => UpdateStatus(textMessage)));
    return;
  }

  richTextBox.AppendText(textMessage + Environment.NewLine);
}

【问题讨论】:

  • 发布您的代码您尝试过什么但不起作用??
  • 请不要在标题前加上“C#”之类的前缀。这就是标签的用途。

标签: c# winforms textbox richtextbox


【解决方案1】:

您的代码看起来应该可以工作,请确保检查正确的InvokeRequired 标志:

void UpdateStatus(string textMessage)
{
  if (richTextBox.InvokeRequired)
  {
    richTextBox.Invoke(new MethodInvoker(() => UpdateStatus(textMessage)));
    return;
  }

  richTextBox.AppendText(textMessage + Environment.NewLine);
}

【讨论】:

    【解决方案2】:

    要使 RichTextBox 自动滚动,请使用 ScrollToCaret 方法:

    richTextBox.AppendText("Hello");    
    richTextBox.ScrollToCaret();
    

    【讨论】:

    • 是的,TextBox 默认会自动滚动到插入符号。
    【解决方案3】:

    一个简单快速的解决方法是

    Application.DoEvents()

    【讨论】:

    • 我应该在我的表单中的什么地方做这个?
    • 在每次添加新文本后添加该语句。
    • 这是 hack - 如果您阻止 UI 线程,则不应将此视为问题的解决方案。
    • @BrokenGlass :你是对的,这是一个快速而肮脏的修复。我应该删除答案,因为它可能会产生误导?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多