VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleHome / Objekte / TextBox / Select Wort/Token selektieren |
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