【问题标题】:.NET RichTextBox: unable to change Rtf property.NET RichTextBox:无法更改 Rtf 属性
【发布时间】:2010-06-10 19:29:35
【问题描述】:

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

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

  • 戴夫

【问题讨论】:

    标签: c# .net richtextbox rtf


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗯,我绝对明白你所看到的。看起来 RichTextBox 控件试图通过添加和删除它认为合适的东西来为您“修复”您的 RTF。当我像上面那样设置颜色时,取那个 RTF,然后把它反馈回去,就可以了。如果我给它喂一些稍微不同的东西,它会删除我的颜色表。如果我不给它文字,它似乎也删除了颜色表,大概是因为没有文字可以着色。
    • 非常有趣。在 RTF 属性方面,我注意到某种“自我纠正”行为。我还通过给它一个明显错误的 RTF 字符串来检查“错误格式,静默纠正”理论,它立即用 ArgumentException 拒绝它。为了解决您的问题,我的 RTB 是 Windows 窗体的一部分,因此它不会被重新创建,实际上正在显示。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2022-11-07
      • 2017-03-09
      相关资源
      最近更新 更多