2012-02-25 65 views
1

我試圖將RichTextBox用作狀態顯示,但每次我追加到RichTextBox的文本時都不會更新。常規的多行TextBox會在每次添加新文本時進行更新,但我更願意使用RichTextBox。是否需要設置某種屬性來查看更新?作爲文本狀態顯示時,RichTextBox不會不斷更新

UPDATE: 此外,我將如何自動使其向下滾動每一條消息顯示?

就像我說的,如果我用一個TextBox替換RichTextBox,我可以看到消息的每一行,因爲它們正在被寫出,它也會自動向下滾動到底部以顯示最新添加的文本。

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

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

發佈您的代碼你有什麼試過,並沒有工作? – Star 2012-02-25 01:50:53

+0

請不要用「C#」等來標題。這就是標籤的用途。 – 2012-02-25 02:41:30

回答

1

一個方便,快捷的解決將是

Application.DoEvents()

+0

我在哪裏可以做到這一點? – arc1880 2012-02-25 02:06:09

+0

在每次添加新文本後都放置該語句。 – roymustang86 2012-02-25 02:09:26

+5

這是破解 - 如果你阻止UI線程,你不應該考慮這個問題的解決方案。 – BrokenGlass 2012-02-25 02:11:59

1

要自動使RichTextBox中滾動,請使用ScrollToCaret方法:

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

TextBox是否已具有此功能? – arc1880 2012-02-25 02:40:00

+0

是的,默認情況下,TextBox自動滾動到插入符。 – ogggre 2012-02-25 02:58:58

0

您的代碼看起來喜歡它應該工作,確保你檢查了正確的InvokeRequired flag:

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

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