如何将RichTextBox滚动到底部?

75

我需要能够滚动RichTextBox到底部,即使我不在添加文本。我知道我可以添加文本,然后使用它来设置选择开始位置。但是,为了视觉效果,我想确保它在底部,因此我不会添加任何文本。

4个回答

111

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

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

3
恐怕不是很可靠。有时你只能滚动到光标顶部像素刚好可见的位置。 - gatopeich
1
我使用Visual Studio 2013和WPF,但是在RichTextBox中没有ScrollToCaret()方法,有什么想法吗? - Cyberguille
@gatopeich - 在你的文本末尾加上一个换行符,你就可以看到所有内容了。 - Pat Mustard

17
RichTextBox 如果获得焦点并使用 AppendText 添加信息,则将保持滚动到末尾。如果将 HideSelection 设置为 false,则在失去焦点时它将保留其选择并保持自动滚动。
我设计了一个日志查看器GUI,使用了下面的方法。它使用了一个完整的核心来保持更新。删除这段代码并将 HideSelection 设置为 false 将CPU使用率降至1-2%。
//Don't use this!
richTextBox.AppendText(text);  
richTextBox.ScrollToEnd();

14

在 WPF 中,您可以使用 ScrollToEnd:

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

1
问题涉及WinForms,但在那里没有滚动到末尾。 - Riki

0

代码应该在富文本框的TextChanged事件中编写,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接