首页 文章

RichTextBox SelectionFont意外地*不是* null

提问于
浏览
0

我想更改一大块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

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

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

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

  • 0

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

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

相关问题