In regelmäßigen Abständen füge ich neue Textzeilen hinzu. Ich möchte, dass das Textfeld automatisch zum untersten Eintrag (dem neuesten) blättert, wenn eine neue Zeile hinzugefügt wird.
Wenn Sie verwenden TextBox.AppendText(string text)
, wird automatisch zum Ende des neu angehängten Textes gescrollt. Die flackernde Bildlaufleiste wird vermieden, wenn Sie sie in einer Schleife aufrufen.
Es ist auch eine Größenordnung schneller als die Verkettung auf dem .Text
Grundstück. Dies hängt jedoch möglicherweise davon ab, wie oft Sie es anrufen. Ich habe mit einer engen Schleife getestet.
Dies wird nicht gescrollt, wenn es aufgerufen wird, bevor das Textfeld angezeigt wird, oder wenn das Textfeld ansonsten nicht sichtbar ist (z. B. auf einer anderen Registerkarte eines TabPanels). Siehe TextBox.AppendText () nicht automatisch scrollen . Dies kann wichtig sein oder auch nicht, je nachdem, ob Sie eine automatische Bildlauffunktion benötigen, wenn der Benutzer das Textfeld nicht sehen kann.
Es scheint, dass die alternative Methode aus den anderen Antworten auch in diesem Fall nicht funktioniert. Eine Möglichkeit, dies zu umgehen, besteht darin, ein zusätzliches Scrollen für das VisibleChanged
Ereignis durchzuführen :
textBox.VisibleChanged += (sender, e) =>
{
if (textBox.Visible)
{
textBox.SelectionStart = textBox.TextLength;
textBox.ScrollToCaret();
}
};
Intern AppendText
macht so etwas:
textBox.Select(textBox.TextLength + 1, 0);
textBox.SelectedText = textToAppend;
Es sollte jedoch keinen Grund geben, dies manuell zu tun.
(Wenn Sie es selbst dekompilieren, werden Sie feststellen, dass es möglicherweise effizientere interne Methoden verwendet und einen scheinbar geringfügigen Sonderfall aufweist.)