2015-03-17 2 views
4

Как изменить только семейство шрифтов в RichTextBox (RTB), сохраняя размер шрифта без изменений? У меня есть RTB, который может иметь текст в разных шрифтах и ​​размерах шрифта, я хотел бы изменить весь контент, чтобы иметь новую семейство шрифтов, но сохранить любой размер, который у них есть у пользователя. Как я мог это достичь? Я знаю свойство SelectionFont, но для каждой перегрузки конструктора Font требуется также размер шрифта.Изменение семейства шрифтов RichTextBox только не FontSize

 RichTextBox rtb = new RichTextBox(); 
     // some code that adds various text of different fonts and font sizes 
     rtb.SelectAll(); 
     rtb.SelectionFont = new Font("arial", ??); 

Также я попадались решение Ларса Tech на this SO post, но я думаю, что это слишком сложно и слишком много работы для достижения этой функции.

+0

Похоже, решение Ларса может быть путь, если у вас есть несколько стилей в одном 'RichTextBox'. Другие решения, которые я видел, могут поддерживать размер шрифта и т. Д. только если весь текст в RichTextBox использует тот же стиль (шрифт, жирный шрифт, размер и т. д.) –

ответ

3

Если вы хотите избежать решения pinvoking, вам придется прокручивать символы в отдельности. Чтобы избежать мерцания, вы можете использовать закадровый управления RichTextBox, чтобы применить изменения:

using (RichTextBox tmpRB = new RichTextBox()) { 
    tmpRB.SelectAll(); 
    tmpRB.SelectedRtf = rtb.SelectedRtf; 
    for (int i = 0; i < tmpRB.TextLength; ++i) { 
    tmpRB.Select(i, 1); 
    tmpRB.SelectionFont = new Font("Arial", tmpRB.SelectionFont.Size); 
    } 
    tmpRB.SelectAll(); 
    rtb.SelectedRtf = tmpRB.SelectedRtf; 
} 
+0

Он работает и легко понять, спасибо Ларсу! У меня не было мерцающей проблемы, но хорошая идея разрешить мерцающую проблему. – NoSaidTheCompiler

Смежные вопросы