Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Im Artikel “Das TextBox-Steuerelement” haben wir die Grundlagen zum TextBox-Steuerelement beschrieben. Dort haben wir noch längst nicht alle Möglichkeiten behandelt, die es bei der Programmierung von TextBox-Steuerelementen unter WPF gibt. Im vorliegenden Artikel schauen wir uns an, wie Sie das Verhalten einer TextBox beim Fokuserhalt steuern können, genau genommen: Wie erreiche ich, dass die Einfügemarke an einer bestimmten Stelle positioniert wird beziehungsweise der komplette Inhalt markiert wird Und das nicht nur für den Fokuserhalt durch die Tabulator- oder Eingabetaste, sondern auch beim Anklicken mit der Maustaste.
Einfügemarke beim Fokuserhalt an bestimmter Position platzieren
Die folgenden Definitionen von TextBox-Elementen sollen die Einfügemarke an verschiedenen Positionen platzieren, wenn das Element den Fokus erhält. Das erste Element soll die Einfügemarke am Start des Textes platzieren. Dazu nutzen wir das Ereignis GotFocus:
<Label>Einfügemarke vorn:</Label> <TextBox x:Name="txtCursorStart" GotFocus="txtCursorStart_GotFocus">Dies ist ein Beispieltext.</TextBox>
Dafür hinterlegen wir die folgende Ereignismethode:
Private Sub txtCursorStart_GotFocus(sender As Object, e As RoutedEventArgs) txtCursorStart.Select(0, 0) End Sub
Diese verwendet die Select-Methode, um mit dem ersten Parameter die Startposition und mit der zweiten die Länge der Markierung festzulegen. Der Wert 0 für den ersten Parameter fügt die Einfügemarke ganz vorn ein und der Wert 0 für den zweiten Parameter sorgt dafür, dass die Einfügemarke nicht zu einer Markierung wird.
Für die Anzeige der Einfügemarke ganz hinten im Textfeld fügen wir ein weiteres Textfeld hinzu. Für dieses definieren wir das gleiche Ereignis:
<Label >Einfügemarke hinten:</Label> <TextBox x:Name="txtCursorEnd" GotFocus="txtCursorEnd_GotFocus">Dies ist ein Beispieltext.</TextBox>
Die Methode, die durch dieses Ereignis ausgelöst wird, ermittelt für den ersten Parameter der Select-Methode jedoch mit der Length-Eigenschaft die Länge des im TextBox-Element enthaltenen und mit der Eigenschaft Text gelieferten Text. Der zweite Parameter hat wie im ersten Beispiel den Wert 0:
Private Sub txtCursorEnd_GotFocus(sender As Object, e As RoutedEventArgs) txtCursorEnd.Select(txtCursorEnd.Text.Length, 0) End Sub
Im dritten Textfeld wollen wir den vollständigen Text markieren, wenn das Textfeld den Fokus erhält:
<Label>Alles markieren:</Label> <TextBox x:Name="txtCursorAll" GotFocus="txtCursorAll_GotFocus">Dies ist ein Beispieltext.</TextBox>
Wir könnten auch hier die Select-Methode verwenden und als Startposition der Markierung den Wert 0 und als Endposition die Länge des zu markierenden Textes übergeben. Eleganter ist in diesem Fall jedoch der Einsatz der SelectAll-Methode:
Private Sub txtCursorAll_GotFocus(sender As Object, e As RoutedEventArgs) txtCursorAll.SelectAll() End Sub
All diese Möglichkeiten funktionieren gut, wenn der Benutzer den Fokus mit der Tabulator-Taste oder mit der Eingabe-Taste verschiebt (siehe Bild 1).