我想向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字符串中包含水平线?

最佳答案

有几种不同的方法可以在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来处理这些东西,这正是它的来源。

一些进一步的实验产生了下面的代码,该代码在WordPad和RichTextBox控件中有效。
{\pict\wmetafile8\picw26\pich26\picwgoal20000\pichgoal15
0100090000035000000000002700000000000400000003010800050000000b0200000000050000
000c0202000200030000001e000400000007010400040000000701040027000000410b2000cc00
010001000000000001000100000000002800000001000000010000000100010000000000000000
000000000000000000000000000000000000000000ffffff00000000ff040000002701ffff0300
00000000
}

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

关于c# - Richtextbox绘制rtf线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8324801/

10-13 02:15