繁体   English   中英

.NET RichTextBox:无法更改Rtf属性

[英].NET RichTextBox: unable to change Rtf property

也许我在这里错过了一些真正简单的事情,但是我一直在努力更改RichTextBox的RTF属性,以便对文本应用一些颜色编码。 我遇到的问题的最直接的例子可能是将Rtf属性设置为在其标题中包含颜色表。

Rtf属性返回的默认RTF字符串:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}\viewkind4\uc1\pard\f0\fs17\par}

我想在颜色表中设置新的RTF字符串:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}{\colortbl;\red128\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;}}\viewkind4\uc1\pard\f0\fs17\par}

我使用以下方法进行设置:

RichTextBox richTextBox = new RichTextBox();
richTextBox.Rtf = rtfStr; // My new RTF string, as seen above.

但是,通过调试器,可以观察到Rtf属性顽固地拒绝更改。 没有抛出异常,它只是拒绝更改。 当我使用string.Replace()单词在它们周围包含RTF颜色标签时,也会发生相同的问题。 我也尝试过关闭文本框中的所有ReadOnly属性。

任何建议将是最有帮助的,谢谢!

  • 戴夫

为什么不使用内置功能更改颜色?

    rtbPreview.SelectionStart = 1;
    rtbPreview.SelectionLength = 3;
    rtbPreview.SelectionFont = newFont;
    rtbPreview.SelectionColor = Color.Red;

或者,如果您真的需要弄乱RTF格式,请以编程方式设置颜色,然后查看生成的RTF,然后尝试一下。 格式可能不正确,因此它会静默消除错误。

编辑:另外,我希望您实际上并不是每次都创建一个新的RTB。 如果是这样,则从您的示例中可以看出您没有将其添加到控件集合中,在这种情况下,无论如何都不会看到它。

正如Jeremy所述,.NET中的RichTextBox将在您分配给.Rtf属性后自动重新格式化RTF数据,以简化和标准化数据。 当您添加颜色表时,并不是RichTextBox拒绝更改,而是您实际上并没有使用任何这些颜色,因此可以简化它们。 只要您添加一些彩色文本以使用每个新的颜色代码,RichTextBox就会保留您的自定义颜色表。

因此,如果您不想使用Jeremy提到的简单属性,则需要跟踪已添加到颜色表中的颜色及其索引。 如果控件是可由用户编辑的,则您还需要具有解析当前颜色表的功能,因为用户可以删除给定颜色的所有文本,并导致从颜色表中删除颜色(可能导致颜色索引重新编号)。

这是有关CodeProject的文章,涵盖了一些基础知识,但没有将颜色表添加到正确的位置,也没有涉及重新解析颜色表: http : //www.codeproject.com/KB/cs/ RTFSyntaxColour.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM