Через равные промежутки времени я добавляю новые строки текста. Я хотел бы, чтобы текстовое поле автоматически прокручивалось до самой нижней записи (самой новой) при добавлении новой строки.
Если вы используете TextBox.AppendText(string text)
, он автоматически прокрутится до конца вновь добавленного текста. Он избегает мерцающей полосы прокрутки, если вы вызываете ее в цикле.
Это также происходит на порядок быстрее, чем конкатенация на свойство .Text
. Хотя это может зависеть от того, как часто вы звоните; Я тестировал с жесткой петлей.
Эта прокрутка не будет прокручиваться, если она вызывается до отображения текстового поля или если текстовое поле иначе не отображается (например, на другой вкладке панели TabPanel). См. TextBox.AppendText () без автоматической прокрутки . Это может или не может быть важным, в зависимости от того, требуется ли автоматическая прокрутка, когда пользователь не видит текстовое поле.
Кажется, что альтернативный метод из других ответов также не работает в этом случае. Одним из способов решения этой проблемы является дополнительная прокрутка события VisibleChanged
:
textBox.VisibleChanged += (sender, e) =>
{
if (textBox.Visible)
{
textBox.SelectionStart = textBox.TextLength;
textBox.ScrollToCaret();
}
};
Внутренне AppendText
делает что-то вроде этого:
textBox.Select(textBox.TextLength + 1, 0);
textBox.SelectedText = textToAppend;
Но не должно быть никаких причин делать это вручную.
(Если вы декомпилируете его самостоятельно, вы увидите, что он использует некоторые, возможно, более эффективные внутренние методы и имеет, как представляется, незначительный особый случай.)