2017-07-14 119 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

相关问题