Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Objekte / TextBox / Select

Wort/Token selektieren

Einführung

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).

Beispiele

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

Code/Quelltext

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