Выделение текста при поиске в vb.net - PullRequest
1 голос
/ 01 августа 2020

Привет, я создал поисковую систему с кнопкой, текстовым полем и полем форматированного текста для поиска элементов, отображаемых в поле форматированного текста (которые импортируются из текстового файла), и для их выделения при обнаружении. По какой-то причине, когда я нажимаю кнопку поиска, слово, которое ищется, не выделяется.

Это код, который я использовал:

    Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click  

    Dim index As Integer  = 0

      While index < rtxtEdit.Text.LastIndexOf(txtSearch.Text)  
        rtxtEdit.Find(txtSearch.Text,index ,rtxtEdit.TextLength, RichTextBoxFinds.None)  
        rtxtEdit.SelectionBackColor = Color.Red  
        index = rtxtEdit.Text.IndexOf(txtSearch.Text, index) + 1  
      End While  
    End Sub  

Ответы [ 3 ]

2 голосов
/ 01 августа 2020

Как указано в этом сообщении :

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
Dim len = searchText.Length
Dim pos = rtb.Find(searchText, 0, RichTextBoxFinds.NoHighlight)
While (pos >= 0)
    rtb.Select(pos, len)
    rtb.SelectionBackColor = Color.Yellow
    if pos + len  >= rtb.Text.Length Then
        Exit While
    End If
    pos = rtb.Find(searchText, pos + len, RichTextBoxFinds.NoHighlight)
End While
End Sub
1 голос
/ 01 августа 2020

Я бы написал это так:

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
    Dim searchFor As String = txtSearch.Text.Trim
    If searchFor <> "" Then
        Dim index As Integer = 0
        Dim startAt As Integer = 0
        Do
            index = rtxtEdit.Find(searchFor, startAt, RichTextBoxFinds.None)
            If index <> -1 Then
                rtxtEdit.SelectionBackColor = Color.Red
                startAt = index + 1
            End If
        Loop While index <> -1
    End If
End Sub
0 голосов
/ 01 августа 2020
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim index As Integer = 0

    'Clears the existing formatting
    Dim t = rtxtEdit.Text
    rtxtEdit.Text = t

    'Incremented the loop condition by 1 so that text at the beginning gets selected as well.
    While index < rtxtEdit.Text.LastIndexOf(txtSearch.Text) + 1
        rtxtEdit.Find(txtSearch.Text, index, rtxtEdit.TextLength, RichTextBoxFinds.None)
        rtxtEdit.SelectionBackColor = Color.Red
        index = rtxtEdit.Text.IndexOf(txtSearch.Text, index) + 1
    End While
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...