2017-07-14 732 views
1

我想將格式化文本和表格添加到richTextBox。richTextBox - 添加文本和表格

爲此,我使用這些代碼:

文字:

richTextBox1.SelectionFont = new Font("Maiandra GD", 30, FontStyle.Bold); 
richTextBox1.SelectionColor = Color.Red; 
richTextBox1.SelectionIndent = 0; 
richTextBox1.AppendText("text text text"); 

而且表:

StringBuilder tableRtf = new StringBuilder(); 

tableRtf.Append(@"{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}"); 
for (int j = 0; j <5; j++) 
{ 
    tableRtf.Append(@"\trowd"); 
    tableRtf.Append(@"\cellx2500" + " ghhghgjghjghjhggjh"); 
    tableRtf.Append(@"\intbl\cell"); 
    tableRtf.Append(@"\cellx10000\intbl\cel"); 
    tableRtf.Append(" " + "sdfsdfs" + @"\intbl\clmrg\cell\row"); 
} 

tableRtf.Append(@"\pard"); 
tableRtf.Append(@"}"); 
richTextBox1.Rtf=tableRtf.ToString(); 

richTextBox1.Rtf=tableRtf.ToString(); 

殺死了以前的內容。

我該如何使它們兼容?

1)添加格式化文本到RichTextBox的這樣:

richTextBox1.SelectionFont = new Font("Maiandra GD", 30, FontStyle.Bold); 
richTextBox1.SelectionColor = Color.Red; 
richTextBox1.AppendText("text text text"); 

它非常可讀的,我可以很容易地修改


,因爲我想要兩個的事情,是不是重複。

2)我想添加表格。

所以結構:

文字文字文字文字文字文字 文字文字文字文字

| TABLE |

文字文字文字文字文字文字 文字文字文字文字文字 文字文字文字文字

| TABLE |

但我不知道我怎麼能申請表格,而不會丟失以前的內容?

+1

的[字符串添加到在C#一個RichTextBox]可能的複製(https://stackoverflow.com/questions/6485156/adding-strings-to-a-richtextbox-in-c-sharp) – mjwills

+0

你想做richTextBox1.Rtf = tableRtf.Rtf; ? 調用.ToString只會給你一個系統字符串,顯然不包含任何格式。 –

+1

@Joe_DM但是格式化顯然是在字符串 –

回答

2

你需要做的是將rtf代碼解析到標題和正文中。

表體以循環開始,並保持\par肯定是一個好主意。

但是,您既不能替換舊文本,也不能將主體追加到最後。

取而代之,您需要在最後一個捲曲之前插入它!這是因爲最後的曲線標誌着整個rtf代碼的結束,並且之後的任何事情都將被忽略!

這很簡單。

要獲得完整的解決方案,您還需要合併標題。

這是更多的工作,全部寫出來超出了答案。

但其基本原理很簡單:

你需要了解你的表頭增加了的事情已經在原始標題的事情。

最常見的事情是font tablecolor table

所以,如果你想在所附的表來使用一個或多個不同的字體,你需要這樣做:

  • 將它們添加到字體表用新字體索引,例如如前面分號後的\f1\fnil Consolas;
  • 通過更改循環以在第一個\intbl表格段落格式控制字:\intbl\f2\fs24 ghhghgjghjghjhggjh之後包含新字體來使用它。
  • 如果您想在表格中使用不同的字體,則根據需要重複。
  • 如果需要,可以添加一個cfN字體顏色選擇器。

同樣的想法也適用於顏色表。它沒有明確的索引,所以順序很重要;所有顏色都附加在一起,每個都在末尾用分號表示:

{\colortbl ;\red255\green0\blue0;\red25\green0\blue220;} 

..從格式化文本中爲紅色添加藍色。

你看,這是工作,需要一些努力和準備。

你可以找到full rtf specs here

這裏是扮演的是一個與RTF截圖..:

enter image description here

注意,表頭的部分是由控制創建的;你可能想使用這個虛擬控制或者也許你可以計算出你需要的部分,哪些是沒有必要的..

更新:這裏是一個版本,「傻瓜附加RTF」:

tableRtf.Append(@"{\fonttbl{\f0\fnil\fcharset0 Courier;}}"); 
for (int j = 0; j <5; j++) 
{ 
    tableRtf.Append(@"\trowd"); 
    tableRtf.Append(@"\cellx2500" + " ghhghgjghjghjhggjh"); 
    tableRtf.Append(@"\intbl\cell"); 
    tableRtf.Append(@"\cellx10000\intbl\cel"); 
    tableRtf.Append(" " + "sdfsdfs" + @"\intbl\clmrg\cell\row"); 
} 

tableRtf.Append(@"\pard"); 
tableRtf.Append(@"}"); 

string rtf1 = richTextBox1.Rtf.Trim().TrimEnd('}'); 
string rtf2 = tableRtf.ToString(); 
richTextBox1.Rtf = rtf1 + rtf2; 

請注意,在表體之前插入的字體表工作正常!但請確保不要添加rtf-start標籤!

enter image description here

+0

我解決了這個問題。謝謝你的時間和你非常詳細的答案! – kovak