我想将格式化文本和表格添加到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 |
等
但我不知道如何在不丢失之前内容的情况下应用表格?
答案 0 :(得分:2)
您需要做的是将rtf代码分解到标题和正文中。
表体从循环开始,保持\par
肯定是个好主意。
但是你既不能替换旧文本,也不能简单地将身体附加到最后。
相反,您需要在最后一次卷曲之前插入!这是因为最后一个卷曲标志着整个rtf代码的结束,之后的任何内容都会被忽略!
这很简单。
对于完整的解决方案,您还需要组合标题。
这是一项更多的工作,写出来将超出SO答案。
但基本原则很简单:
您需要了解表标题添加到原始标题中已有的内容。
最常见的事情是font table
和color table
。
因此,如果您想在附加表中使用一种或多种不同的字体,则需要执行以下操作:
\f1\fnil Consolas;
。\intbl
表格段落格式控制字\intbl\f2\fs24 ghhghgjghjghjhggjh
之后包含新字体来使用它。cfN
字体颜色选择器。同样的想法也适用于颜色表。它没有明确的索引,所以顺序很重要;附加所有颜色,每个颜色最后都有一个分号:
{\colortbl ;\red255\green0\blue0;\red25\green0\blue220;}
..为格式化文本中的红色添加蓝色。
你知道,这是工作,需要付出一些努力和准备。
您可以找到full rtf specs here。
以下是使用rtf播放一些内容的截图..
请注意,表头部分是由控件创建的;您可能想要使用虚拟控件,或者您可以找出您需要哪些部件以及哪些部件不是必需的..
更新:这是一个&#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标签!!