Scroll-Position auslesen?

Hallo ihr,
in einem ChatClient habe ich eine RichTextBox - sobald ein Ereignis im Chat passiert, wird dieses unten angefügt. Dazu muss der Cursor meines Wissens erstmal unten platziert werden:

'chatmain ist die RichTextBox
chatmain.SelStart = Len(chatmain.Text) 'Cursor ans Textende
chatmain.SelLength = 0
chatmain.SelText = „Franz hat sich dem Chat angeschlossen.“ 'Text einfügen

Problem: Wenn jemand mal nach oben scrollen möchte, um etwas nachzulesen, um einen Textausschnitt zu markieren und/oder zu kopieren, dann wird er jedesmal wieder ans Textende „geworfen“, sobald etwas im Chat passiert.

Mir ist keine elegantere Möglichkeit eingefallen, außer: Aktuelle SelStart und SelLength merken. Dann ans Textende, den gewünschten Text anfügen, und dann den Cursor an die ursprüngliche Position setzen und die Markierung wieder so herstellen wie sie vorher war. Dabei flimmert der Text einmal kurz (aus Sicht des Users), aber es geht.

Das geht jedoch nur, wenn Text markiert wurde. Falls nur hochgescrollt wird, ohne etwas markiert zu haben, wird er auch wieder nach unten geschmissen.

Kann man dagegen etwas tun? Kann ich vielleicht auch die aktuelle Scroll-Position auslesen, speichern und neu setzen?

Oder gehts viel eleganter?

Grüße
Lars

andere Idee
Hallo Lars,

kann dir zwar nicht Quellcode weiterhelfen, hab aber folgende Idee:
Mach doch zwei Fenster, eins zum scrollen und eins wo die aktuellen Texte eingefügt werden.

Wenn dir meine Idee gefällt, gut, wenn nicht auch gut!

Gruß
Thorsten
P.S. Weiß leider nicht wie viel Prog.-Aufwand das ist.

Hey Thorsten,

ja so ähnlich mach ich es jetzt auch. Sobald man anfängt, in dem Fenster zu scrollen, werden keine neuen Nachrichten mehr eingefügt, stattdessen wandern diese in ein unsichtbares Puffer-Fenster und werden dort zwischengespeichert. Sobald man mit der Maus aus dem Chatfenster wieder rausklickt, springt es wieder nach unten und die aktuellen Nachrichten werden unten wieder angefügt. Dazu noch einen Hinweis während des Scrollens „Der Chat wurde angehalten“ oder so, und dann sollts passen :smile:

Danke!
Lars