2009-05-21 112 views
68

我需要能够将RichTextBox滚动到底部,即使我没有附加文本。我知道我可以附加文字,然后用它来设置选择开始。不过,我想确保它在底部出于视觉原因,所以我不添加任何文本。如何滚动RichTextBox到底部?

回答

100

您可以尝试将SelectionStart属性设置为文本的长度,然后调用ScrollToCaret方法。

richTextBox.SelectionStart = richTextBox.Text.Length; 
richTextBox.ScrollToCaret(); 
+2

不是很可靠,我很害怕。您有时会滚动,因此插入符的顶部像素可见。 – gatopeich 2013-03-11 18:05:39

+1

我使用Visual Studio 2013和WPF,但ScrollToCaret()方法对于RichTextBox,任何想法都不存在? – Cyberguille 2015-07-28 20:59:37

+0

@gatopeich - 在文本的末尾添加一个换行符,您应该能够看到所有内容 – 2015-11-11 06:06:42

14

在WPF中,你可以使用ScrollToEnd:

richTextBox.AppendText(text); 
richTextBox.ScrollToEnd(); 
+0

以编程方式添加文本时不起作用 – 2013-03-16 07:54:07

-1

没有必要:

richTextBox.SelectionStart = richTextBox.Text.Length; 

该做的伎俩:

richTextBox.ScrollToCaret(); 
16

RichTextBox将保持如果已经滚动到最后重点和您使用AppendText添加信息。如果您将HideSelection设置为false,它将在失去焦点并保持自动滚动时保持其选择状态。

我设计了一个使用下面方法的Log Viewer GUI。它用完了一个完整的核心。摆脱此代码并将HideSelection设置为false会将CPU使用率降低至1-2%。

//Don't use this! 
richTextBox.AppendText(text); 
richTextBox.ScrollToEnd(); 
0

代码应该写在富文本框的TextChanged事件,如:

private void richTextBox_TextChanged(object sender, EventArgs e) { 
     richTextBox.SelectionStart = richTextBox.Text.Length; 
     richTextBox.ScrollToCaret(); 
}