.NET RichTextBox: невозможно изменить свойство Rtf - PullRequest
1 голос
/ 10 июня 2010

Возможно, мне здесь не хватает чего-то очень простого, но я изо всех сил пытался изменить свойство RTF моего RichTextBox, чтобы применить цветовое кодирование к моему тексту. Вероятно, самый простой пример проблемы, с которой я столкнулся, это установка свойства Rtf для включения таблицы цветов в его заголовок.

Строка RTF по умолчанию, возвращаемая свойством Rtf:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}\viewkind4\uc1\pard\f0\fs17\par}

И новую строку RTF, которую я хотел бы установить с моей таблицей цветов:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}{\colortbl;\red128\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;}}\viewkind4\uc1\pard\f0\fs17\par}

И я установил это с помощью:

RichTextBox richTextBox = new RichTextBox();
richTextBox.Rtf = rtfStr; // My new RTF string, as seen above.

Тем не менее, с помощью отладчика, то можно наблюдать, что Rtf свойство упорно отказывается изменить; исключений не выбрасывается, просто отказывается меняться. Та же проблема возникает, когда я использую слова string.Replace () для включения в них цветовых меток RTF. Я также попытался отключить любые свойства ReadOnly в текстовом поле.

Любые предложения будут наиболее полезны, спасибо!

  • Dave

Ответы [ 2 ]

0 голосов
/ 20 февраля 2011

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

Следовательно, если вы не хотите использовать простые свойства, упомянутые Джереми, вам нужно будет отслеживать, какие цвета вы уже добавили в таблицу цветов и каковы их индексы. Если пользователь может редактировать элемент управления, вам также понадобится возможность проанализировать текущую таблицу цветов, поскольку пользователь может удалить весь текст данного цвета и вызвать удаление цвета из таблицы цветов (вероятно, вызывая перенумерацию индекса цвета).

Вот статья о CodeProject, которая охватывает некоторые основы, но не добавляет таблицу цветов в совершенно правильное место и не занимается повторной обработкой таблицы цветов: http://www.codeproject.com/KB/cs/RTFSyntaxColour.aspx

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

Почему бы не использовать встроенную функциональность для изменения цвета?

    rtbPreview.SelectionStart = 1;
    rtbPreview.SelectionLength = 3;
    rtbPreview.SelectionFont = newFont;
    rtbPreview.SelectionColor = Color.Red;

Или, если вам действительно нужно возиться с форматом RTF, установить цвет программно, затем посмотреть, какой RTF он генерирует, и датьэто попытка.Возможно, формат неправильный, поэтому он молча подавляет ошибку.

Редактировать: Кроме того, я надеюсь, что вы на самом деле не каждый раз создаете новый RTB.Если да, то из вашего образца видно, что вы не добавляете его в коллекцию элементов управления, и в этом случае его никогда не увидят.

...