W regularnych odstępach czasu dodam do niego nowe wiersze tekstu. Chciałbym, aby pole tekstowe automatycznie przewijało się do najniższego wpisu (najnowszego) za każdym razem, gdy dodawany jest nowy wiersz.
Jeśli go użyjesz TextBox.AppendText(string text)
, nastąpi automatyczne przewinięcie do końca nowo dołączonego tekstu. Pozwala to uniknąć migotania paska przewijania, jeśli wywołujesz go w pętli.
Zdarza się również, że jest o rząd wielkości szybszy niż konkatenacja na .Text
nieruchomości. Chociaż może to zależeć od tego, jak często go nazywasz; Testowałem z ciasną pętlą.
Nie przewinie się, jeśli zostanie wywołane przed wyświetleniem pola tekstowego lub jeśli pole tekstowe nie będzie widoczne (np. W innej zakładce TabPanel). Zobacz TextBox.AppendText () nie przewijający się automatycznie . To może, ale nie musi być ważne, w zależności od tego, czy potrzebujesz automatycznego przewijania, gdy użytkownik nie widzi pola tekstowego.
Wydaje się, że alternatywna metoda z innych odpowiedzi również nie działa w tym przypadku. Jednym sposobem jest dodatkowe przewijanie VisibleChanged
zdarzenia:
textBox.VisibleChanged += (sender, e) =>
{
if (textBox.Visible)
{
textBox.SelectionStart = textBox.TextLength;
textBox.ScrollToCaret();
}
};
Wewnętrznie AppendText
robi coś takiego:
textBox.Select(textBox.TextLength + 1, 0);
textBox.SelectedText = textToAppend;
Ale nie powinno być żadnego powodu, aby robić to ręcznie.
(Jeśli sam go zdekompilujesz, zobaczysz, że używa on prawdopodobnie bardziej wydajnych metod wewnętrznych i ma coś, co wydaje się być drobnym przypadkiem szczególnym.)