C# WinForms中的RichTextBox自动滚动功能

8

如果我在 RTB 中添加一些文本,如何使其自动向下滚动?

目前我使用的方法是:

conversationRtb.Rtf = tab.conversationRtb.Rtf;
conversationRtb.SelectionStart = conversationRtb.Text.Length;
conversationRtb.ScrollToCaret();

但它的效果不是很好。有时它不能滚动到最底端,而是在倒数第二行停止。
有时它会造成很大的偏移量。
我找不到原因。有没有其他方法来滚动?我找到了AutoScrollOffset但没有关于如何使用它的示例。

3
这两篇文章可能会有所帮助。它们使用 User32.dll 来滚动。https://dev59.com/jF7Va4cB1Zd3GeqPJF4v http://www.dutton.me.uk/2011/08/31/richtextbox-scrolltocaret-bug/ - keyboardP
我宁愿不使用user32.dll。我正在使用mono,而且我有外部库的问题。 - sczdavos
好的。我刚刚添加了一个条件。如果是Windows,则执行@keyboardP解决方案,否则执行默认的ScrollToCaret。看起来运行良好。 - sczdavos
@keyboardP评论中的“dutton.me.uk”链接似乎已经失效,但是这里有一个可用的替代链接:http://www.dutton.me.uk/2011-08-31/richtextbox-scrolltocaret-bug/(请注意URL中的斜杠现在变成了连字符)。;-) - bernz
1个回答

8
你可以将 HideSelection 的值设置为 false,这样 AppendText 将会触发正确的滚动。

我已经尝试过了,但对我没有用 :( - sczdavos
你是在使用WinForms还是WPF?(ScrollToEnd) - Aghilas Yakoub
哦,抱歉,是的,我正在使用WinForms。我已经更新了标签。 - sczdavos

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