Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB2005, VB2008 | 23.04.09 |
Suchfunktion für Textfelder Eine universelle Suchfunktion für Textfelder unter Berücksichtigung verschiedener Suchoptionen, inkl. Weitersuchen. | ||
Autor: Dieter Otter | Bewertung: | Views: 11.264 |
www.tools4vb.de | System: 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 TextBox1 (MultiLine = True)
- TextBox txtSuch
- zwei RadioButtons, RadioButton1 (Text = "gesamten Text durchsuchen") und RadioButton2 (Text = "Suche innerhalb des markierten Bereichs")
- CheckBox CheckBox1 (Text = "Groß/Kleinschreibung ignorieren")
- Button btnSearch (Enabled = False)
- Button btnSearchOn (Enabled = False)
Und hier der Code:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Vor-Einstellungen RadioButton1.Checked = True CheckBox1.Checked = True End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles TextBox1.TextChanged, _ txtSearch.TextChanged ' Prüfen: ist ein Text und auch Suchtext vorhanden ? btnSearch.Enabled = (TextBox1.TextLength > 0 AndAlso txtSearch.TextLength > 0) btnSearchOn.Enabled = (btnSearch.Enabled AndAlso RadioButton1.Checked) End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged, _ RadioButton2.CheckedChanged btnSearchOn.Enabled = (btnSearch.Enabled AndAlso RadioButton1.Checked) End Sub
''' <summary> ''' Durchsucht den Text nach dem angegebenen String ''' </summary> ''' <param name="Text">Text, der durchsucht werden soll</param> ''' <param name="SearchText">gesuchter Text</param> ''' <param name="IgnoreCase">True, wenn Groß-/Kleinschreibung ignoriert ''' werden soll, anfernfalls False</param> ''' <param name="StartPos">Start-Position der Suche</param> ''' <returns>Position der Fundstelle oder 0, wenn nicht gefunden</returns> Public Function TextSearch(ByVal Text As String, _ ByVal SearchText As String, _ Optional ByVal IgnoreCase As Boolean = True, _ Optional ByVal StartPos As Integer = 1) As Long If StartPos < 1 Then StartPos = 1 If StartPos < Text.Length Then If IgnoreCase Then ' Groß-/Kleinschreibung ignorieren Return (Text.IndexOf(SearchText, StartPos - 1, _ StringComparison.CurrentCultureIgnoreCase) + 1) Else Return (Text.IndexOf(SearchText, StartPos - 1) + 1) End If Else Return 0 End If End Function
Private Sub btnSearch_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSearch.Click ' Suche starten Dim StartPos As Integer = 0 Dim Pos As Integer = 0 With TextBox1 If RadioButton1.Checked Then ' gesamten Text durchsuchen Pos = TextSearch(.Text, txtSearch.Text, CheckBox1.Checked) Else ' nur markierten Text durchsuchen StartPos = .SelectionStart Pos = TextSearch(.SelectedText, txtSearch.Text, CheckBox1.Checked, StartPos) End If If Pos > 0 Then ' zur Fundstelle springen und hervorheben .SelectionStart = StartPos + Pos - 1 .SelectionLength = txtSearch.TextLength .ScrollToCaret() .Focus() Else MsgBox("Suchbegriff nicht gefunden!", MsgBoxStyle.Information) End If End With End Sub
Private Sub btnSearchOn_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSearchOn.Click ' Weitersuchen Dim Pos As Integer = 0 Dim StartPos As Integer = 0 With TextBox1 StartPos = .SelectionStart + 2 Pos = TextSearch(.Text, txtSearch.Text, CheckBox1.Checked, StartPos) If Pos > 0 Then ' zur Fundstelle springen und hervorheben .SelectionStart = Pos - 1 .SelectionLength = txtSearch.TextLength .ScrollToCaret() .Focus() Else MsgBox("Suchbegriff nicht gefunden!", MsgBoxStyle.Information) End If End With End Sub
End Class