如何仅更改RichTextBox(RTB)中的字体系列,保持字体大小不变?我有一个RTB,可以有不同的字体和字体大小的文本,我想改变所有的内容,以拥有一个新的字体系列,但保留他们从用户的任何大小。我怎么能实现这个目标?我知道一个SelectionFont属性,但Font构造函数的每个重载都需要字体大小。
RichTextBox rtb = new RichTextBox();
// some code that adds various text of different fonts and font sizes
rtb.SelectAll();
rtb.SelectionFont = new Font("arial", ??);
此外,我确实在this SO post遇到了Lars Tech的解决方案,但我认为这太复杂了,太多工作无法实现该功能。
答案 0 :(得分: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;
}