RichTextBox SelectionFont意外地*不是* null

时间:2012-11-05 19:12:00

标签: winforms richtextbox rtf

我想在不删除粗体/斜体/下划线格式的情况下更改RTF块的字体大小(类似于this question中的问题)。接受的答案是修改文本框的选择,直到SelectionFont属性为 null ,以便查找可以单独修改的一致格式文本的运行。听起来很合理。但是,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来实现这一点。)

2 个答案:

答案 0 :(得分:0)

我已经放弃尝试通过Winforms来解决这个问题。当我将更改应用于整个文档(而不仅仅是一部分)时,事实证明直接修改RTF并不太难。

在这种情况下,我对字体大小感兴趣,它由\fs命令表示。因此,要使用10pt文本替换所有8.5pt文本,您可以将\fs17替换为\fs20。 (是的,显然,RTF字体大小以半个单位为单位)。

这似乎工作得很好,虽然它确实感觉就像其中一个“让我们使用正则表达式破坏我们的HTML”类型解决方案,所以我不相信它非常强大。

答案 1 :(得分:0)

看看这个: Changing font for richtextbox without losing formatting

我认为这是同一个问题。 LarsTech的解决方案非常适合我。