c# - 如何自动滚动到多行文本框的底部?

标签 c# winforms textbox scroll

我有一个 .Multiline 属性设置为 true 的文本框。我会定期向其中添加新的文本行。我希望文本框在添加新行时自动滚动到最底部的条目(最新的条目)。我该如何实现?

最佳答案

At regular intervals, I am adding new lines of text to it. I would like the textbox to automatically scroll to the bottom-most entry (the newest one) whenever a new line is added.

如果您使用 TextBox.AppendText(string text) , 它会自动滚动到新附加文本的末尾。如果您在循环中调用它,它会避免闪烁的滚动条。

它也恰好比连接到 .Text 属性快一个数量级。尽管这可能取决于您调用它的频率;我正在用一个紧密的循环进行测试。


如果在显示文本框之前调用它,或者如果文本框不可见(例如,在 TabPanel 的不同选项卡中),则不会滚动。参见 TextBox.AppendText() not autoscrolling .这可能重要也可能不重要,具体取决于您是否需要在用户看不到文本框时自动滚动。

在这种情况下,其他答案中的替代方法似乎也不起作用。一种解决方法是在 VisibleChanged 事件上执行额外的滚动:

textBox.VisibleChanged += (sender, e) =>
{
    if (textBox.Visible)
    {
        textBox.SelectionStart = textBox.TextLength;
        textBox.ScrollToCaret();
    }
};

在内部,AppendText 做这样的事情:

textBox.Select(textBox.TextLength + 1, 0);
textBox.SelectedText = textToAppend;

但应该没有理由手动完成。

(如果你自己反编译它,你会发现它使用了一些可能更有效的内部方法,并且有一些似乎是次要的特例。)

关于c# - 如何自动滚动到多行文本框的底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898307/

相关文章:

c# - 在重定向时保持 HTTP 基本身份验证有效

c# - 以编程方式为标签分配边距和/或填充

c# - 加快 datagridview 单元格字体更改

c++ - 如何使用 WinAPI 制作可编辑的文本框?

reporting-services - SSRS元素跳位

Windows 8 Metro - 如何制作密码文本框?

c# - 我是否正确执行异步/等待?

c# - iTextSharp 文件操作和显示到 FileStreamResults

c# - Listbox.Contains 包含 "Like"运算符

c# - 使用 Visual C# 在多个 Windows 窗体应用程序中形成关闭事件