Промяна на цвета на текста в 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.) Ключовата точка на въпроса за OP е как да промените цвета на една дума в поле с форматиран текст. Моят отговор показва как. - 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