vb.net - Многоцветный RichTextBox - PullRequest
3 голосов
/ 23 марта 2011

Я хотел бы сделать строку текста в моем richtextbox многоцветной. Я пробовал различные реализации, представленные в Интернете, и читал SelectedText и другие темы, но не могу заставить его работать так, как мне хотелось бы.

Вот что у меня есть

RichTextBox1.Text = "This is black "
RichTextBox1.SelectionFont = New Font("Microsoft Sans Serif", 8.25, FontStyle.Bold)
RichTextBox1.SelectionColor = Color.Green
RichTextBox1.SelectedText = "[BOLD GREEN]"
RichTextBox1.Text = RichTextBox1.Text + " black again"

Цвета, которые я хочу, указаны в тексте. Происходит следующее: вся строка становится зеленой, в начале текстового поля вместо встроенного появляется «[BOLD GREEN]».

Я хочу, чтобы это звучало так: «это черное» как черное. «[BOLD GREEN]» зелёный и «чёрный снова» чёрный.

1 Ответ

5 голосов
/ 23 марта 2011

Не совсем понятно, чего вы пытаетесь достичь. Я не уверен, что понимаю форматирование в скобках почти так же хорошо, как изображение, которое вы смоделировали в Paint. Но все равно идет ...

Я подозреваю, что есть пара проблем с вашим существующим кодом. Прежде всего, это местоположение курсора при вставке нового текста. То, что должно прийти после , первый фрагмент фактически вставляется до его из-за того, где находится метка вставки. Чтобы это исправить, вам нужно переместить его вручную.

Вы также присваиваете строку текста свойству Text в конце своего кода, которое не сохраняет существующую информацию о форматировании. Я подозреваю, что самое простое, что вам нужно сделать, - это вместо этого использовать AppendText метод .

И, наконец, я рекомендую использовать упрощенную перегрузку для создания нового шрифта, поскольку единственное, что вы хотите изменить, - это стиль. Преимущество использования этого вместо этого заключается в том, что вам не нужно жестко задавать имя и размер шрифта в вашем коде на случай, если вы захотите изменить его позже.

Попробуйте вместо этого переписать свой код:

' Insert first snippet of text, with default formatting
RichTextBox1.Text = "This is black "

' Move the insertion point to the end of the line
RichTextBox1.Select(RichTextBox1.TextLength, 0)

'Set the formatting and insert the second snippet of text
RichTextBox1.SelectionFont = New Font(RichTextBox1.Font, FontStyle.Bold)
RichTextBox1.SelectionColor = Color.Green
RichTextBox1.AppendText("[BOLD GREEN]")

' Revert the formatting back to the defaults, and add the third snippet of text
RichTextBox1.SelectionFont = RichTextBox1.Font
RichTextBox1.SelectionColor = RichTextBox1.ForeColor
RichTextBox1.AppendText(" black again")

Результат будет выглядеть так:

sample RichTextBox with formatted text

...