3

当我输入RichTextBox某个单词时,如何使它被突出显示?

我如何在文本中找到要使用的单词SelectionColorSelectionFont

例如:我希望“你好”这个词出现在RichTextBox它变成粗体或变成颜色的时候......

然后,如果我打开我的程序并输入“你好,你好吗?” 你好这个词变成了粗体......有什么想法吗?(我的想法是制作一个带有语法高亮的文本编辑器,它不能指定单词)

(对不起,如果还有其他类似的问题,我试图搜索但我没有找到对我有帮助的答案)

它的窗体,visual basic

4

5 回答 5

3

这段代码应该可以完成工作:

Dim searchstring As String = "hello"
' The word you're looking for
Dim count As New List(Of Integer)()
For i As Integer = 0 To richTextBox1.Text.Length - 1
    If richTextBox1.Text.IndexOf(searchstring, i) <> -1 Then
        'If the word is found
            'Add the index to the list
        count.Add(richTextBox1.Text.IndexOf(searchstring, i))
    End If
Next
Try
    For i As Integer = 0 To count.Count - 1

        richTextBox1.[Select](count(i), searchstring.Length)
        richTextBox1.SelectionFont = New Font(richTextBox1.Font, FontStyle.Bold)
        count.RemoveAt(i)
    Next
Catch
End Try
richTextBox1.[Select](richTextBox1.Text.Length, 0)
richTextBox1.SelectionFont = New Font(richTextBox1.Font, FontStyle.Regula

对于每个索引,选择文本并使其变为粗体。

现在将此代码添加到TextChanged-Event 以检查文本更改为您的单词的任何时间。

于 2013-01-22T22:04:10.517 回答
3

我以不同的方式得到它:

   While Not RichTextBox1.Text.IndexOf("hello", startIndex) = -1
               selectedIndex= RichTextBox1.SelectionStart
        Try
                RichTextBox1.Select(RichTextBox1.Text.IndexOf("test", startIndex) - 1, 1)
        Catch
        End Try
        If RichTextBox1.SelectedText = " " Or RichTextBox1.SelectedText = Nothing Then
            RichTextBox1.Select(RichTextBox1.Text.IndexOf("hello", startIndex) + "test".Length, 1)
            If RichTextBox1.SelectedText = " " Or RichTextBox1.SelectedText = Nothing Then
                RichTextBox1.Select(RichTextBox1.Text.IndexOf("hello", startIndex), "test".Length)
                RichTextBox1.SelectionColor = Color.Blue
            End If
        End If

        startIndex = RichTextBox1.Text.IndexOf("hello", startIndex) + "hello".Length
        RichTextBox1.SelectionStart = selectedIndex
        RichTextBox1.SelectionLength = 0
        RichTextBox1.SelectionColor = Color.Black
    End While

我不知道这是否是最好的方法,但有效。

于 2013-01-23T01:14:30.277 回答
0

这是在找到它后以黄色突出显示选定文本的代码(可以用任何其他颜色替换):

    'find the text that need to be highlighted.
    foundIndex = RichTextBox1.Find("hello", foundIndex + 1, -1, selectedFinds)
    RichTextBox1.Focus()

    If foundIndex = -1 Then
        MessageBox.Show("This document don't contains the text you typed, or any of the text you typed as a whole word or mach case.", "Find Text Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
 else
'now the text will be highlighted.
 RichTextBox1.SelectionBackColor = Color.Yellow
Richtextbox1.focus
    End If

我希望该代码会有所帮助。

于 2013-04-26T05:40:09.523 回答
0

Private Sub RichTextBox1_DragOver(sender As Object, e As DragEventArgs) 处理 RichTextBox1.DragOver

    Dim p As Point
    p.X = e.X
    p.Y = e.Y
    Dim num As Integer
    Dim rightTXT As String
    Dim leftTXT As String
    Dim textpart As String
    Dim TSelect As Boolean
    Dim curpos As Integer = RichTextBox1.GetCharIndexFromPosition(RichTextBox1.PointToClient(p))
    Dim PosStart As Integer

    TSelect = False
    If e.Data.GetDataPresent(DataFormats.StringFormat) Then

        e.Effect = DragDropEffects.All

        Try
            leftTXT = Microsoft.VisualBasic.Left(RichTextBox1.Text, curpos)
            If InStr(leftTXT, "%", CompareMethod.Text) Then
                rightTXT = Microsoft.VisualBasic.Right(RichTextBox1.Text, Len(RichTextBox1.Text) - curpos)

                If InStr(rightTXT, "%", CompareMethod.Text) Then
                    PosStart = curpos - InStr(StrReverse(leftTXT), "%") + 1
                    num = curpos + InStr(rightTXT, "%") - PosStart - 1

                    textpart = (RichTextBox1.Text.Substring(PosStart, num).TrimEnd)

                    Label3.Text = "mouse drag over:" + textpart
                    Label5.Text = num.ToString()

                    If ListBox1.Items.Contains(textpart) Then
                        TSelect = True
                    End If
                End If
            End If
        Catch ex As Exception
            Label4.Text = ex.ToString()
        End Try

    End If

    If TSelect Then      
        Me.RichTextBox1.Select(PosStart - 1, num + 2)
        wordSearch = RichTextBox1.SelectedText

        Label4.Text = "word drag state: true"
        match = True   
    Else
        Label3.Text = "mouse drag over:"
        Label4.Text = "word drag state: false"
        Me.RichTextBox1.Select(0, 0)
    End If
End Sub
于 2013-09-12T12:11:08.667 回答
0

我发现上面的代码对于一个简单的任务来说太长/太复杂了......

    Dim c As Integer = 0

    Dim o As Integer = 0
    Dim s As Integer = 0

    Dim txt As String = RTB.Text
    RTB.BackColor = Color.Black

    Dim starts As Integer = 0

    Do While txt.Contains(key) ' this avoids unnecessary loops

        s = txt.IndexOf(key)
        starts = s + o
        RTB.Select(starts, key.Length)
        RTB.SelectionBackColor = Color.Yellow
        RTB.SelectionColor = Color.Blue

        txt = txt.Substring(s + key.Length)
        o += (s + key.Length)

        c += 1

    Loop
    Me.Status.Text = c.ToString() & " found" ' and the number found
于 2018-02-07T11:44:29.763 回答