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.

Sehr sehr Kirsche
quelle

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();
Brandon
quelle
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();
DrWu
quelle
14

In WPF können Sie ScrollToEnd verwenden:

richTextBox.AppendText(text);  
richTextBox.ScrollToEnd();
mxgg250
quelle
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();
}
agileDev
quelle
-1

Es besteht keine Notwendigkeit für:

richTextBox.SelectionStart = richTextBox.Text.Length;

Das macht den Trick:

richTextBox.ScrollToCaret();
Ben Richards
quelle
12
Aber von dem Caret ist nicht unten, wie würde diese nach unten scrollen?
LarsTech