RichTextBox SelectionFont неожиданно * not * null

Я хотел бы изменить размер шрифта фрагмента RTF, не стирая форматирование жирным / курсивом / подчеркиванием (проблема, аналогичная проблеме в this question). Принятый ответ - изменить выделение текстового поля до тех пор, пока свойство SelectionFont не станет нулевым, чтобы найти серии последовательно отформатированного текста, которые можно изменять индивидуально. Звучит разумно. Однако фактическое поведение элемента управления RichTextBox кажется несовместимым с документацией.

В документации для RichTextBox.SelectionFont MSDN указано:

Если в текущем выделенном тексте указано более одного шрифта, это свойство равно null.

Однако этот код, в котором используется смешанный полужирный / обычный текст, ведет себя не так, как вы ожидали:

var rtb = new RichTextBox {
    Rtf = @"{\rtf1 This is \b bold\b0.}"
};

rtb.SelectAll();
// Now you'd expect rtb.SelectionFont to be null,
// but it actually returns a Font object

Есть ли другой надежный способ форматирования текста, чтобы я мог изменить размер шрифта, не нарушая другое форматирование. (Манипулирование RTF напрямую - это нормально, я не совсем настроен на использование WinForms для этого).


person andypaxo    schedule 05.11.2012    source источник
comment
Болезненно. Он не используется для смешанных шрифтов, а не только для смешанных стилей или размеров.   -  person Hans Passant    schedule 05.11.2012


Ответы (2)


Я отказался от попыток пройти через Winforms, чтобы исправить это. Поскольку я применяю изменение ко всему документу (а не только к одной его части), оказывается, что напрямую изменить RTF не так уж и сложно.

В данном случае меня интересует размер шрифта, который представлен командой \fs. Таким образом, чтобы заменить весь текст размером 8,5 пунктов текстом размером 10 пунктов, вы можете заменить \fs17 на \fs20. (Да, размер шрифта RTF, по-видимому, измеряется в полпункта).

Кажется, это работает достаточно хорошо, хотя кажется, что это одно из тех решений типа «давайте искажать наш HTML с помощью регулярных выражений», поэтому я не уверен, что это очень надежно.

person andypaxo    schedule 05.11.2012

Взгляните на это: Изменение шрифта для richtextbox без потери форматирования

Думаю, это та же проблема. Решение LarsTech идеально подходит для меня.

person Jerry    schedule 13.10.2013