richTextBox - 添加文本和表格

时间:2017-07-14 14:00:26

标签: c# 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 个答案:

答案 0 :(得分:2)

您需要做的是将rtf代码分解到标题和正文中。

表体从循环开始,保持\par肯定是个好主意。

但是你既不能替换旧文本,也不能简单地将身体附加到最后。

相反,您需要在最后一次卷曲之前插入!这是因为最后一个卷曲标志着整个rtf代码的结束,之后的任何内容都会被忽略!

这很简单。

对于完整的解决方案,您还需要组合标题。

这是一项更多的工作,写出来将超出SO答案。

但基本原则很简单:

您需要了解表标题添加到原始标题中已有的内容。

最常见的事情是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

请注意,表头部分是由控件创建的;您可能想要使用虚拟控件,或者您可以找出您需要哪些部件以及哪些部件不是必需的..

更新:这是一个&#39;附加rtf for dummies&#39;版本:

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