System.Windows.Forms.RichTextBox “mitscrollen” lassen… [ein Anwendungsbeispiel]
Das automatische “mitscrollen” einer RichTextBox ist garnicht so trivial, wie man ursprünglich annehmen mag.
Wer die Methode ScrollToCaret(); gefunden hat, wird zwangsläufig auf diese Seite stoßen: http://msdn2.microsoft.com/en-us/library/system.windows.forms.textboxbase.scrolltocaret.aspx
Jedoch funktionierte der im Beispiel angegebene Code leider nicht so, wie ich es brauchte. Ich wollte eine RichtTextBox haben, die die Eingaben der User protokolliert und natürlich die Ausgabe von oben nach unten vollzieht. Wenn das Ende der Box erreicht ist, soll der Scrollbalken immer ganz unten stehen, um die aktuelle Logmeldung anzuzeigen.
Die Lösung klingt einfach, hat mich aber mindestens eine gute halbe Stunde beschäftigt. Man bedient sich hierbei eines kleinen Tricks, um die Methode ScrollToCaret(); anwenden zu können. Ein Zeichen (in meinem Beispiel das jeweilig letzte Zeichen des aktuellen Textes) wird markiert, wobei diese Markierung nicht angezeigt wird. Wenn dieses Zeichen markiert ist, erledigt ScrollToCaret() das Scrollen an die gewünschte Stelle.
In der Deklaration der RichTextBox fügt man die Zeile richTextBox1.HideSelection = true;ein, um das Anzeigen der Markierung zu verhindern.
Nun der eigentliche “Akt” der Markierung
1. this.richTextBox1.Text += “\nneue Logmeldung”;
2. this.richTextBox1.Select(richTextBox_protokoll.Text.Length - 1, richTextBox_protokoll.Text.Length);
3. this.richTextBox1.ScrollToCaret();
In Zeile 1 wird wie gehabt eine Meldung in die Textbox geschrieben.
Anschließend wird in Zeile 2 eine Markierung gesetzt, die immer das letzte Zeichen des Inhaltes der Textbox einschließt und in Zeile 3 sorgt ScrollToCaret() für den gewünschten Effekt.
Das war es schon und ich vermute mal, dass dieses Beispiel sicherlich öfters gesucht wird, als das obige unter msdn2.microsoft.com.
Leave a Reply
You must be logged in to post a comment.