c# - Richtextbox绘制一条rtf线

标签 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 字符串中包含水平线?

最佳答案

有几种不同的方法可以在 RTF 中创建水平线。根据所使用的控件或程序,您的里程可能会有所不同。控件和程序中的 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 袖珍指南来处理这些东西,这就是它的来源。

一些进一步的实验产生了下面的代码,它在写字板和 RichTextBox 控件中工作。

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

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

下面是一个完整、有效的 RTF 文档中的最后一个代码片段示例,该文档正确显示在写字板和 Windows 窗体的 RichTextBox 控件上:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.19041}\viewkind4\uc1 
\pard\sa200\sl276\slmult1\f0\fs22\lang9 Above\par
{\pict\wmetafile8\picw26\pich26\picwgoal20000\pichgoal15 
0100090000035000000000002700000000000400000003010800050000000b0200000000050000
000c0202000200030000001e000400000007010400040000000701040027000000410b2000cc00
010001000000000001000100000000002800000001000000010000000100010000000000000000
000000000000000000000000000000000000000000ffffff00000000ff040000002701ffff0300
00000000
}
\par
Below\par
}

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

相关文章:

c# - 根据内部列表使用 .notation 对对象列表进行排序

wpf - 检测 RichTextBox 是否为空

WPF RichTextBox 在 FlowDocument 中每行仅显示 1 个字符

css - 造型边界 - 对吗?

c# - filehelpers - 解析可变行长度

c# - 我什么时候可以在 native foreach 循环上使用 List<T>.ForEach?

c# - 弹性视频编解码器(断电)

c# - 如何使用 Linq 读取 XML

javascript - 文本阻碍文本区域

android - Opengl Es 线宽