Entwickler-Ecke

WinForms - Richtextbox Control - Index vor dem SelectionChanged Event


haschme - Do 30.07.15 09:43
Titel: Richtextbox Control - Index vor dem SelectionChanged Event
Hallo,

ich entwickel gerade ein UserControl, das unter anderem eine RichtextBox verwendet.
Diese soll als DateiViewer dienen, also Textinhalte von großen Dateien (teilweise Millionen von Datensätze) anzeigen.

Mein Problem ist zur Zeit, dass mir immer wieder beim markieren eines Textbereichs der Cursor verspringt.
Leider weis ich auch nicht wie ich das Problem abfangen kann.

Ich würde gerne bevor dieser ungewollte Cursorsprung passiert die aktuelle Cursorposition speichern und dann nach dem Sprung einfach zur gespeicherten Position zurückspringen.

Gibt es eine Möglichkeit den Cursorsprung abzufangen? Im selectionchanged - Event z.B. ist es ja leider schon zu spät.

Liebe Grüße


Ralf Jansen - Do 30.07.15 09:55

Zitat:
Gibt es eine Möglichkeit den Cursorsprung abzufangen? Im selectionchanged - Event z.B. ist es ja leider schon zu spät.


Warum? Nach SelectionChanged ist vor SelectionChanged. Also in SelectionChanged die aktuelle Position merken um beim nächsten SelectionChanged dann diese Info zu verwenden um zu wissen wo der Cursor vorher war.


haschme - Do 30.07.15 10:39

Vielen Dank für die schnelle Antwort!

Ja da hast du natürlich Recht.

Leider weis ich nur nicht wie genau ich das ganze abfangen kann, also bevor der Sprung passiert.

Ich weis nicht wie ich herrausfinden soll wann der Cursor springt und wann nicht.

Ich muss ja irgendwie abfragen können ob der Cursor springen wird.

Das ganze passiert während des Markierens.


Ralf Jansen - Do 30.07.15 11:44

Spekulativ würde ich sagen in SelectionChanged mußt du dir SelectionStart und SelectionLength merken. Bei der nächsten Änderung, also dem nächsten SelectionChanged Event, prüfst du deine Condition ob dieses Änderung ok ist und setzt halt dann SelectionStart und SelectionLength entsprechend auf die gemerkten Werte zurück wenn nicht. Dabei aufpassen den das wird ja wieder ein SelectionChanged auslösen. Du mußt also den Event vermutlich so veriegeln das die Prüfung in SelectionChanged bei einer Änderung aus SelectionChanged nicht durchgeführt wird sonst baust du dir eventuell eine Endlosschleife bzw. einen StackOverflow.