Ich habe ein Textfeld mit der Eigenschaft "Multiline" auf "true" gesetzt. 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. Wie kann ich das erreichen?
Antworten
Zu viele Anzeigen?Ich habe einen einfachen Unterschied gefunden, der in diesem Thread noch nicht angesprochen wurde.
Wenn Sie all das tun ScrollToCarat()
Aufrufe als Teil des Formulars Load()
funktioniert das nicht. Ich habe gerade meine ScrollToCarat()
Aufruf des Formulars Activated()
und es funktioniert einwandfrei.
bearbeiten
Es ist wichtig, dieses Scrollen nur beim ersten Mal durchzuführen, wenn das Formular Activated
Ereignis ausgelöst wird (nicht bei späteren Aktivierungen), oder es wird ein Bildlauf durchgeführt jede wenn Ihr Formular aktiviert wird, was Sie wahrscheinlich nicht wollen.
Wenn Sie also nur die Activated()
Ereignis, um Ihren Text zu scrollen, wenn Ihr Programm geladen wird, dann können Sie das Ereignis einfach innerhalb des Ereignishandlers selbst abbestellen, so:
Activated -= new System.EventHandler(this.Form1_Activated);
Wenn Sie andere Dinge tun müssen, wenn Ihr Formular aktiviert wird, können Sie eine bool
auf wahr, wenn Sie zum ersten Mal Ihre Activated()
Ereignis ausgelöst wird, so dass Sie bei nachfolgenden Aktivierungen nicht mehr blättern, aber immer noch die anderen Dinge tun können, die Sie tun müssen.
Auch wenn Ihr TextBox
auf einer Registerkarte befindet, die nicht die SelectedTab
, ScrollToCarat()
hat keine Auswirkungen. Sie müssen also zumindest dafür sorgen, dass die Registerkarte beim Blättern ausgewählt ist. Sie können den Code in eine YourTab.SuspendLayout();
y YourTab.ResumeLayout(false);
Paar, wenn Ihr Formular flackert, wenn Sie dies tun.
Ende der Bearbeitung
Ich hoffe, das hilft!