Трябва да променя цвета на една дума в поле с форматиран текст, когато текстът е равен на нещо, така че например, ако потребителят въведе „Розово“, текстът ще бъде розов, но само думата розова.
Как да постигнем това?
Трябва да променя цвета на една дума в поле с форматиран текст, когато текстът е равен на нещо, така че например, ако потребителят въведе „Розово“, текстът ще бъде розов, но само думата розова.
Как да постигнем това?
Както е посочено от @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