簡體   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