Измените имя и размер шрифта в RichTextBox с сохранением форматирования

#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 — это мучение , и обычно в этом нет необходимости. Справа много сообщений с хорошими примерами.. ===>