Richtextbox绘制rtf行

时间:2011-11-30 10:58:05

标签: c# richtextbox line rtf

我想在RichTextBox中添加一条水平线作为我文本的分隔符。 我找到了一些实现一行的RTF代码示例,并以这种方式尝试了它们:

rtbResFile.Rtf = @"{\rtf1{\pard some text.\par}{\pard \brdrb \brdrs \brdrw10 \brsp20 \par}{\pard \par}{\pard some other text.\par}}";

这种方式实现了创建带边框的空白段落,因此应该看起来像一条线。但它没有显示任何内容。只是一个空白段落。 即使我尝试以包含线对象的方式实现它

{\rtf1
{\pard some text.\par}
{\pard {\*\do\dobxcolumn\dobypara\dodhgt
        \dpline\dpxsize9200\dplinesolid\dplinew30}\par}
{\pard some other text.\par}
}

它仍然没有显示任何内容。 RichTextBox是否支持此功能?或者任何其他方式包括rtf字符串中的水平线?

2 个答案:

答案 0 :(得分:13)

在RTF中创建水平线有几种不同的方法。根据所使用的控制或程序,您的里程可能会有所不同。控件和程序中的RTF实现往往忽略了他们不知道如何处理的标记。

通过绘制多边形:

{\pard{\*\do
\dobxcolumn \dobypara \dodhgt7200
\dpline \dpptx0 \dppty0 \dpptx7200
\dppty0 \dpx0 \dpy0 \dpxsize7200
\dpysize0 \dplinew15
\dplinecor0 \dplinecog0 \dplinecob0 }\par}

插入带有边框的空白段落,后跟另一个没有边框的空白段落:

{\pard \brdrb \brdrs \brdrw10 \brsp20 \par}
{\pard\par}

您可以通过在段落上设置缩进来更改线条的大小和视在位置:

{\pard \li2268 \ri567
\brdrb \brdrs \brdrw10 \brsp20 \par}
{\pard\par}

我强烈推荐O'Reilly的RTF Pocket Guide来处理这些东西,这就是它的来源。

进一步的实验产生了下面的代码,它可以在写字板和RichTextBox控件中使用。

{\pict\wmetafile8\picw26\pich26\picwgoal20000\pichgoal15 
0100090000035000000000002700000000000400000003010800050000000b0200000000050000
000c0202000200030000001e000400000007010400040000000701040027000000410b2000cc00
010001000000000001000100000000002800000001000000010000000100010000000000000000
000000000000000000000000000000000000000000ffffff00000000ff040000002701ffff0300
00000000
}

基本上,它涉及插入黑点的1x1像素图像,并根据需要通过调整高度和宽度目标来拉伸它。目标衡量标准是缇。缇被定义为1/1440英寸。这是一个可怕的黑客,但它确实有效。

答案 1 :(得分:3)

此功能可创建一个仅显示图片的水平条。为了创建这张图片,我只是将Visio中的水平条复制到RTF文本框中,然后查看底层的RTF。因此,可以以这种方式插入任何图像。

下面的代码的工作原理是将光标移动到文本的最末端,然后设置"选择" RTF是上述条形图像。然后取消选择该文本。

代码将此栏设置为居中,但是通过将comment设置为空字符串(或仅删除代码),将保持左对齐。

{  
   "errorCode": 0,
   "message": "Invalid xml {Expected elements 'post-network-update@http://api.linkedin.com/v1 id@http://api.linkedin.com/v1 visibility@http://api.linkedin.com/v1 ad-account@http://api.linkedin.com/v1 comment@http://api.linkedin.com/v1 attribution@http://api.linkedin.com/v1 content@http://api.linkedin.com/v1 mention@http://api.linkedin.com/v1 title@http://api.linkedin.com/v1 dsc-name@http://api.linkedin.com/v1 private-message@http://api.linkedin.com/v1 share-target-reach@http://api.linkedin.com/v1' instead of 'commment@http://api.linkedin.com/v1' here in element share@http://api.linkedin.com/v1}",
   "requestId": "ODBIHNJYOZ",
   "status": 400,
   "timestamp": 1455664570337
}