Изменить цвет текста в TextBox при условии

Мне нужно изменить цвет одного слова в расширенном текстовом поле, когда текст равен чему-то, поэтому, например, если пользователь вводит «Розовый», текст будет розовым, но только слово розовым.

Как этого добиться?


person Mark Ireland    schedule 28.08.2014    source источник
comment
Если вы говорите о Winforms, вы можете выбрать часть текста вашего текстового поля и применить изменения к выбору.   -  person Kilazur    schedule 28.08.2014


Ответы (2)


Как заявил @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
person Bjørn-Roger Kringsjå    schedule 28.08.2014
comment
Ваш код будет проверять только один цвет, поэтому, если будет введено больше цветов, это не даст лучшего решения. - person ; 28.08.2014
comment
Мой английский не очень хорош, поэтому я не знаю, как это объяснить, поэтому я попробую. 1. Вы должны указать, где этот код должен применяться. 2. это не даст полного решения вопроса - person ; 28.08.2014
comment
@Sample Я здесь не для того, чтобы судить о твоем английском. 1.) Нет, не знаю. Если бы это было частью проблемы и / или указано в вопросе, я бы это сделал. Это не. 2.) Ключевым моментом вопроса ОП является то, как изменить цвет одного слова в текстовом поле с расширенным форматированием. Мой ответ показывает, как. - person Bjørn-Roger Kringsjå; 28.08.2014

Вы можете использовать свойство 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
person Matt Wilko    schedule 28.08.2014