Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB4, VB5, VB6 | 09.09.01 |
Komfortable Suchfunktion für Textfelder Eine universelle Suchfunktion für Textfelder unter Berücksichtigung verschiedener Suchoptionen, inkl. Weitersuchen. | ||
Autor: Dieter Otter | Bewertung: | Views: 20.960 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Das nachfolgende Beispiel zeigt, wie sich eine Suchfunktion für ein mehrzeiliges Textfeld realisieren lässt. Die Suche kann optional über den gesamten Textinhalt oder nur innerhalb des markierten Textes erfolgen. Desweiteren ist auch eine Weitersuch-Funktion vorhanden. Als Einstellungen kann zusätzlich festgelegt werden, ob die Groß-/Kleinschreibung beachtet oder ignoriert werden soll.
Um das Beispiel testen zu können, benötigen Sie eine Form mit folgenden Steuerelementen:
- TextBox txtText (MultiLine = True)
- TextBox txtSuch
- zwei OptionButtons, Option1(0) (Caption = "gesamten Text durchsuchen") und Option1(1) (Suche innerhalb des markierten Bereichs)
- CheckBox Check1 (Caption = "Groß/Kleinschreibung beachten")
- CommandButton cmdSuchen (Enabled = False)
- CommandButton cmdWeitersuchen (Enabled = False)
Und hier der Code:
' Wurde überhaupt ein Suchbegriff eingegeben? Private Sub txtSuch_Change() cmdSuchen.Enabled = (txtSuch.Text <> "") cmdWeitersuchen.Enabled = (txtSuch.Text <> "" And _ Option1(0) = True) End Sub ' Einstellungen Private Sub Option1_Click(Index As Integer) cmdWeitersuchen.Enabled = (txtSuch.Text <> "" And _ Option1(0) = True) End Sub ' Suchen Private Sub cmdSuchen_Click() Dim lPos As Long Dim lBegPos As Long If Option1(0) Then ' Gesamten Text durchsuchen lBegPos = 0 lPos = TextSearch(txtText.Text, txtSuch.Text, _ (Check1.Value <> 0)) Else ' Nur markierten Bereich durchsuchen lBegPos = txtText.SelStart lPos = TextSearch(txtText.SelText, txtSuch.Text, _ (Check1.Value <> 0)) End If If lPos > 0 Then With txtText .SelStart = lBegPos + lPos - 1 .SelLength = Len(txtSuch.Text) .SetFocus End With End If If lPos < 1 Then _ MsgBox "Suchbegriff nicht gefunden!" End Sub ' Weitersuchen Private Sub cmdWeitersuchen_Click() Dim lPos As Long Dim lBegPos As Long ' Im Gesamten Text weitersuchen lBegPos = txtText.SelStart + 2 lPos = TextSearch(txtText.Text, txtSuch.Text, _ (Check1.Value <> 0), lBegPos) If lPos > 0 Then With txtText .SelStart = lBegPos + lPos - 2 .SelLength = Len(txtSuch.Text) .SetFocus End With End If If lPos < 1 Then _ MsgBox "Suchbegriff nicht gefunden!" End Sub
Und hier die eigentliche Suchfunktion:
Über den Paramater bCase legen Sie fest, ob die Groß-/Kleinschreibung berücksichtigt werden soll (True) oder nicht (False). Desweiteren kann über den Parameter lBegPos die Start-Position für die Suche festgelegt werden.
' Textsuche Public Function TextSearch(ByVal strText As String, _ ByVal strSuch As String, _ Optional ByVal bCase As Boolean = False, _ Optional ByVal lBegPos As Long = 1) As Long Dim lPos As Long If lPos < 1 Then lPos = 1 If bCase Then ' Groß-/Kleinschreibung beachten! lPos = InStr(Mid$(strText, lBegPos), strSuch) Else ' Groß-/Kleinschreibung ignorieren! lPos = InStr(LCase$(Mid$(strText, lBegPos)), _ LCase$(strSuch)) End If TextSearch = lPos End Function