Мне нужно изменить цвет одного слова в расширенном текстовом поле, когда текст равен чему-то, поэтому, например, если пользователь вводит «Розовый», текст будет розовым, но только слово розовым.
Как этого добиться?
Мне нужно изменить цвет одного слова в расширенном текстовом поле, когда текст равен чему-то, поэтому, например, если пользователь вводит «Розовый», текст будет розовым, но только слово розовым.
Как этого добиться?
Как заявил @Kilazur в своем комментарии, вам нужно выбрать слова и установить SelectionColor
.
Вот пример:
Dim word As String = "word"
Dim index As Integer = Me.RichTextBox1.Text.IndexOf(word)
Do While (index > -1)
Me.RichTextBox1.Select(index, word.Length)
Me.RichTextBox1.SelectionColor = Color.Pink
index = Me.RichTextBox1.Text.IndexOf(word, (index + word.Length))
Loop
Вы можете использовать свойство SelectionColor после выбора интересующего вас текста.
Вы можете искать текст в любое время, но событие TextChanged кажется подходящим временем для этого (хотя, если у вас много текста, это может быть медленным)
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
FindWords(RichTextBox1, "Pink", Color.Pink)
End Sub
Private Sub FindWords(rtb As RichTextBox, word As String, wordColour As Color)
'store the selection before any change was made so we can set it back later
Dim selectionStartBefore As Integer = rtb.SelectionStart
Dim selectionLengthBefore As Integer = rtb.SelectionLength
Dim selection As Integer
'loop through finding any words that match
selection = rtb.Text.IndexOf(word)
Do While selection >= 0
rtb.SelectionStart = selection
rtb.SelectionLength = word.Length
rtb.SelectionColor = wordColour
selection = rtb.Text.IndexOf(word, selection + word.Length)
Loop
'put the selection back to what it was
rtb.SelectionStart = selectionStartBefore
rtb.SelectionLength = selectionLengthBefore
rtb.SelectionColor = rtb.ForeColor
End Sub