Laden...

Automatische Textselektion in textbox verhindern

3 Antworten
182 Aufrufe
Letzter Beitrag: vor 11 Tagen
Automatische Textselektion in textbox verhindern

Hallo,

Ich habe eine textbox, deren Text beim Abspeichern nach verbotenen Ausdrücken überprüft und editiert wird, das sieht so aus:

textBox1.Text = verboten(textBox1.Text);

Dann ist der Text erstmal nicht selektiert, aber: Wenn gleich darauf die Textbox den Fokus erst verliert, und dann wieder erhält, wird der gesamte Text markiert, was extrem nervig ist. Folgende Aufrufe beheben das Problem nicht:

textBox1.Text = verboten(textBox1.Text);

textBox1.DeselectAll();
textBox1.SelectedText = "";
textBox1.SelectionLength = 0;

Folgendes verhindert zwar die Textselektion, führt aber dazu, dass der Cursor umgesetzt wird, was ungehindertem Schreiben in die TextBox entgegensteht:

textBox1.Text = verboten(textBox1.Text);
if(textBox1.Text.Length > 0)
                        {
                            
                            textBox1.SelectAll();
                            textBox1.DeselectAll();                          
                            
                        }

Wie verhindere ich die Selektion des Textes, bzw. wie kann ich den Cursor wieder an seine ursprüngliche Position setzen?

Die Textbox sollte beim Erhalten des Fokus nicht automatisch selektiert sein, sondern nur wenn sie es vorher schon war (dafür gibt es ja die beiden Eigenschaften SelectionStart und SelectionLength).

Wenn jedoch der Text programmtechnisch geändert wird, so wird intern ein Flag gesetzt, welches beim nächsten Fokussieren automatisch  den gesamten Text selektiert, s. Sourcen zu TextBox.Text (Erklärung s. Kommentar zu _selectionSet).

Nur die interne Methode SelectInternal setzt dieses Flag auf true, welche u.a. von Select(int start, int length) aufgerufen wird,

Du müßtest dir also die aktuelle Cursor-Position SelectionStart vor der Zuweisung von Text merken und nachher Select(pos, 0) aufrufen.

PS: Ich hoffe dir ist klar, daß die Cursor-Position durch das Ändern des Textes mittels deiner verboten-Methode sich nicht an der aktuellen Textstelle orientiert, sondern einfach nur ein Index ist, d.h. wenn du z.B. einige Buchstaben am Anfang löscht, und der Cursor dahinter stand, sich dann der Cursor nachher ein paar Positionen nach rechts verschiebt: deleted|constant Text-> constan|t Text.

Wenn du das exakt lösen möchtest, dann müßte deine verboten-Methode z.B. einen Parameter ref int pos erhalten, der dann intern beim Löschen mitgeändert wird (beachte dabei verschiedene Fälle).

Herzlichen Dank.