Kontakt
DSVGO
Soll in einer TextBox ein bestimmter Ausdruck markiert werden (z.B. nach einer Textsuche), so müssen die Eigenschaften SelStart und SelLength gesetzt werden. Die unten vorgestellte Routine erledigt genau dies, indem sie automatisch nach den Token-Begrenzern sucht.
Eine weitere Anwendung der Prozedur ist die Angleichung des Doppelklick-Verhaltens der diversen Windows-Betriebssysteme: Teilweise wird bei Doppelklick in eine TextBox alles bis zum nächsten Leerzeichen/Zeilenvorschub markiert (also ein Token selektiert, z.B. bei WinNT), manchmal aber auch nur bis zum nächsten nicht-Buchstaben (also ein Wort, z.B. bei WinXP).
Das folgende Beispiel bewirkt, dass (auf jedem Windows-Betriebssystem) bei Doppelklick das komplette Token selektiert wird:
Private Sub txtBla_DblClick() SelToken txtBla End Sub
Der folgende Code-Ausschnitt markiert ggf. genau das Token, in dem der Ausdruck "xyz" vorkommt:
Dim i As Long i = InStr(1, txtBla.Text, "xyz", vbTextCompare) If i > 0 Then SelToken txtBla, i
Die folgende Routine bestimmt ggf. zuerst die Start-Position für die Token-Suche. Davon ausgehend werden die begrenzenden WhiteSpaces (Leerzeichen, Zeilenvorschub, etc. pp.) gesucht (erst nach vorne, dann nach hinten). Schließlich wird der gefundene Bereich selektiert:
Public Sub SelToken( _ ByRef txt As TextBox, _ Optional ByVal iHit As Long) Dim s As String Dim Length As Long Dim iStart As Long Dim iEnd As Long With txt 'Initialisierung: s = .Text Length = Len(s) If iHit < 1 Then iHit = .SelStart + 1 If iHit > Length Then iHit = Length + 1 'Token-Anfang suchen: For iStart = iHit - 1 To 1 Step -1 If Asc(Mid$(s, iStart, 1)) <= vbKeySpace Then Exit For Next iStart 'Token-Ende suchen: For iEnd = iHit To Length If Asc(Mid$(s, iEnd, 1)) <= vbKeySpace Then Exit For Next iEnd 'Token selektieren: .SelStart = iStart .SelLength = iEnd - iStart - 1 End With End Sub
© Jost Schwider, 02.03.2002-02.03.2002 - http://vb-tec.de/txtsel.htm