Способ преодолеть ограничения RichTextBox? - PullRequest
0 голосов
/ 22 июня 2010

Я занимаюсь разработкой приложения с использованием WinForms и элемента управления RichTextBox. Этот элемент управления позволяет вносить различные изменения в формат RTF, используя свойство для изменения шрифта выделенного текста. У меня есть кнопка для переключения жирным шрифтом по тексту:

richTextBoxEditor.SelectionFont = new Font(richTextBoxEditor.SelectionFont,
    richTextBoxEditor.SelectionFont.Style ^ FontStyle.Bold);

Мои другие кнопки (курсив, подчеркивание) имеют идентичный код, за исключением части FontStyle.Bold, которая изменяется для соответствующего форматирования.

Теперь проблема в том, что если я напишу «Hello World» и изменит «Hello» на курсив, а затем я пытаюсь изменить весь «Hello World» на жирный, «Hello» теряет курсив. Я понимаю, почему это происходит (потому что перечисление для всего выбора пусто, поэтому, когда я переключаю полужирный, курсивный флаг остается равным 0), но я пытаюсь найти способ преодолеть это. Я не могу думать ни о чем, кроме как идти за персонажем и менять стиль индивидуально.

Ребята, у вас есть идея получше?

Спасибо.

1 Ответ

0 голосов
/ 22 июня 2010

Звучит так, будто персонаж за персонажем - ваша самая безопасная ставка. Это не кажется серьезной проблемой, если вы не создаете полноценный текстовый процессор.

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

...