Wie scrolle ich eine RichTextBox nach unten?


72

Ich muss in der Lage sein, eine RichTextBox nach unten zu scrollen, auch wenn ich keinen Text anhänge. Ich weiß, dass ich Text anhängen und dann den Start der Auswahl festlegen kann. Ich möchte jedoch aus visuellen Gründen sicherstellen, dass es unten angezeigt wird, sodass ich keinen Text hinzufüge.

Antworten:


103

Sie können versuchen, die SelectionStart-Eigenschaft auf die Länge des Texts festzulegen und dann die ScrollToCaret-Methode aufzurufen.

richTextBox.SelectionStart = richTextBox.Text.Length;
richTextBox.ScrollToCaret();

3
Ich fürchte, nicht sehr zuverlässig. Manchmal wird ein Bildlauf durchgeführt, damit das obere Pixel des Carets sichtbar ist.
Gatopeich

1
Ich verwende Visual Studio 2013 und WPF, aber die ScrollToCaret () -Methode existiert nicht für RichTextBox. Irgendeine Idee?
Cyberguille

@ Gatopeich - Setzen Sie eine neue Zeile am Ende Ihres Textes und Sie sollten in der Lage sein, alles zu sehen
Pat Mustard

17

Das RichTextBoxwird bis zum Ende gescrollt, wenn es den Fokus hat und Sie AppendTextzum Hinzufügen der Informationen verwenden. Wenn Sie HideSelectionauf false setzen, wird die Auswahl beibehalten, wenn der Fokus verloren geht, und der automatische Bildlauf wird fortgesetzt.

Ich habe eine Log Viewer-GUI entworfen, die die folgende Methode verwendet. Es verbrauchte bis zu einem vollen Kern, um Schritt zu halten. Wenn Sie diesen Code entfernen und HideSelectionauf false setzen , sinkt die CPU-Auslastung auf 1-2%.

//Don't use this!
richTextBox.AppendText(text);  
richTextBox.ScrollToEnd();

14

In WPF können Sie ScrollToEnd verwenden:

richTextBox.AppendText(text);  
richTextBox.ScrollToEnd();

Die Frage ist über Winforms, Scroll to End existiert dort nicht
Riki

0

Code sollte wie folgt in das TextChanged-Ereignis des Rich-Text-Felds geschrieben werden:

private void richTextBox_TextChanged(object sender, EventArgs e) {
       richTextBox.SelectionStart = richTextBox.Text.Length;
       richTextBox.ScrollToCaret();
}

-1

Es besteht keine Notwendigkeit für:

richTextBox.SelectionStart = richTextBox.Text.Length;

Das macht den Trick:

richTextBox.ScrollToCaret();

12
Aber von dem Caret ist nicht unten, wie würde diese nach unten scrollen?
LarsTech
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.