#c# #formatting #richtextbox
#c# #форматирование #richtextbox
Вопрос:
Мне удалось найти решение для изменения шрифта (названия и размера) документов с форматированным текстом с сохранением стиля (т. Е.: жирный шрифт, курсив, подчеркивание). Однако для моего решения требуются два дополнительных RTB (оба не видны). Соответствующий код (ниже) обрабатывается с помощью выпадающего списка Имя шрифта / размер:
rtb.Font.Dispose();
//store style info in Temp1
_temp1.Rtf = rtb.Rtf;
//store new font in Temp2
_temp2.Text = rtb.Text;
_temp2.Font = new Font(fontDropDown.Text, int.Parse(fontSizeDropDown.SelectedItem.ToString()));//replaces FONT and STYLE
//
_temp1.Focus();
for (int i = 0; i < _temp1.TextLength; i )
{
_temp1.Select(i, 1);
if (_temp1.SelectionFont != null)
{
_temp2.Select(i, 1);//set font to Font of temp2, style from temp1
_temp2.SelectionFont = new Font(_temp2.SelectionFont, _temp1.SelectionFont.Style);
}
}
rtb.Rtf = _temp2.Rtf;
//
markAsModified();
Я использую два невидимых временных RTB, потому что меня беспокоит возможность «мерцания».
Мне просто интересно, есть ли лучший способ сделать это, БЕЗ привязки или взаимодействия.
* Также: поскольку это решение заставляет меня беспокоиться о проблемах с памятью / производительностью, я хотел бы знать вероятность того, что этот код вызовет такую проблему.
Комментарии:
1. Обязательно используйте невидимые элементы управления RTF при использовании блоков. Если вы создаете много элементов управления RTF, это очень дорого обходится в памяти.
2. Вам не нужен дополнительный RTB, просто следуйте правилам: Никогда не меняйте свойство Text! Только измените свойства SelectionXXX и / или выбранный текст после настройки выделения с помощью SelectionStart и SelectionLength! . Работа с raw RTF — это мучение , и обычно в этом нет необходимости. Справа много сообщений с хорошими примерами.. ===>