我有一个 .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/