.NET RichTextBox:无法更改Rtf属性

时间:2010-06-10 19:29:36

标签: c# .net richtextbox rtf

也许我在这里遗漏了一些非常简单的东西,但我一直在努力改变我的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属性。

任何建议都会有所帮助,谢谢!

  • 戴夫

2 个答案:

答案 0 :(得分:0)

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

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

或者,如果您真的需要弄乱RTF格式,请以编程方式设置颜色,然后查看它生成的RTF,并尝试一下。也许格式不正确所以它默默地压制错误。

编辑: 另外,我希望你每次都不会创建新的RTB。如果你是,那么从你的样本中可以看出你没有将它添加到控件集合中,在这种情况下它永远不会被看到。

答案 1 :(得分:0)

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

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

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

相关问题