Hi
Hier mal ein einfacher Code zum durchsuchen von RichTextBoxen:
Dazu werden 3 Controls benötigt:
1x RichTextBox(RichTextBoxTextField)
1x TextBox(TextBoxSearchPattern)
1x CheckBox(CheckBoxIgnoreCase)
Die gefundenen Werte werden grau hinterlegt.
Importierte Namespaces:
System.Text.RegularExpressions (oben Imports System.Text.RegularExpressions schreiben)
Gruß
~blaze~
Hier mal ein einfacher Code zum durchsuchen von RichTextBoxen:
VB.NET-Quellcode
- Imports System.Text.RegularExpressions
- Public Class Form1
- Private rtbmRichTextBoxMatches As New List(Of RichTextBoxMatch)
- Private Sub ButtonFinden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFinden.Click
- Finden()
- End Sub
- Private Sub Finden()
- If TextBoxSearchPattern.Text = "" Then
- MsgBox("Bitte geben Sie an, wonach Sie suchen wollen.", 48)
- Exit Sub
- End If
- 'Vorhergehende Suche löschen
- If rtbmRichTextBoxMatches.Count > 0 Then
- Zuruecksetzen()
- End If
- 'Position und Länge der momentanen Markierung speichern
- Dim pos As Integer = RichTextBoxTextField.SelectionStart
- Dim Len As Integer = RichTextBoxTextField.SelectionLength
- 'Regex erstellen und matches herausfinden
- For Each m As Match In Regex.Matches(RichTextBoxTextField.Text, Regex.Escape(TextBoxSearchPattern.Text), IIf(CheckBoxIgnoreCase.Checked, 1, 0))
- 'Gefundene Objekte Hellgrau markieren
- RichTextBoxTextField.SelectionStart = m.Index
- RichTextBoxTextField.SelectionLength = m.Length
- 'Speichern der Daten in einer Liste
- rtbmRichTextBoxMatches.Add(New RichTextBoxMatch() With {.Rtf = RichTextBoxTextField.SelectedRtf, .Index = m.Index, .Length = m.Length})
- RichTextBoxTextField.SelectionBackColor = Color.Gainsboro
- Next
- 'Markierungsposition und Länge wieder übernehmen
- RichTextBoxTextField.SelectionStart = pos
- RichTextBoxTextField.SelectionLength = Len
- End Sub
- Public Sub Zuruecksetzen()
- If rtbmRichTextBoxMatches.Count = 0 Then
- 'Ungültige Anzahl der Matches abfangen
- MsgBox("Diese Funktion steht nur zur verfügung, wenn Suchergebnisse vorhanden sind.", 48)
- Else
- 'wieder Position und Länge der momentanen Markierung speichern
- Dim pos As Integer = RichTextBoxTextField.SelectionStart
- Dim Len As Integer = RichTextBoxTextField.SelectionLength
- 'Alle matches auswerten und zurücksetzen
- For Each m As RichTextBoxMatch In rtbmRichTextBoxMatches
- 'Gefundene Objekte markieren
- RichTextBoxTextField.SelectionStart = m.Index
- RichTextBoxTextField.SelectionLength = m.Length
- 'Rtf wiederherstellen
- RichTextBoxTextField.SelectedRtf = m.Rtf
- Next
- rtbmRichTextBoxMatches.Clear()
- 'Markierungsposition und Länge wieder übernehmen
- RichTextBoxTextField.SelectionStart = pos
- RichTextBoxTextField.SelectionLength = Len
- End If
- End Sub
- Private Sub ButtonZuruecksetzen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonZuruecksetzen.Click
- Zuruecksetzen()
- End Sub
- Private Sub RichTextBoxTextField_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBoxTextField.KeyDown
- If rtbmRichTextBoxMatches.Count > 0 Then
- Zuruecksetzen() 'Beim Drücken einer Taste Text zurücksetzen
- End If
- End Sub
- End Class
- Public Class RichTextBoxMatch
- Private strRtf As String
- Private iIndex As Integer
- Private iLength As Integer
- ''' <summary>
- ''' Textformattierung des Matches.
- ''' </summary>
- ''' <value></value>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public Property Rtf() As String
- Get
- Return strRtf
- End Get
- Set(ByVal value As String)
- strRtf = value
- End Set
- End Property
- ''' <summary>
- ''' Position des Textes.
- ''' </summary>
- ''' <value></value>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public Property Index() As Integer
- Get
- Return iIndex
- End Get
- Set(ByVal value As Integer)
- iIndex = value
- End Set
- End Property
- ''' <summary>
- ''' Länge des Textes.
- ''' </summary>
- ''' <value></value>
- ''' <returns></returns>
- ''' <remarks></remarks>
- Public Property Length() As Integer
- Get
- Return iLength
- End Get
- Set(ByVal value As Integer)
- iLength = value
- End Set
- End Property
- End Class
Dazu werden 3 Controls benötigt:
1x RichTextBox(RichTextBoxTextField)
1x TextBox(TextBoxSearchPattern)
1x CheckBox(CheckBoxIgnoreCase)
Die gefundenen Werte werden grau hinterlegt.
Importierte Namespaces:
System.Text.RegularExpressions (oben Imports System.Text.RegularExpressions schreiben)
Gruß
~blaze~
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „~blaze~“ ()