c# - 带项目符号的 RTF 列表在第一行的缩进方式不同

标签 c# .net vb.net winforms rtf

我正在使用 .NET 和 Windows.Forms 应用程序。

在 RTF 框中,我设置(使用 .Rtf = )此 RTF 标记:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}          
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;}
{\*\generator Riched20 10.0.14393}\viewkind4\uc1 
\pard\f0\fs17 
{\pntext\f0 'B7\tab}{\*\pn\pnlvlblt\pnf0\pnindent0{\pntxta\'B7}}\fi-180\li260\f0 The first line in bullet list.
\par{\pntext\f0\'B7\tab}Second line.
\par{\pntext\f0\'B7\tab}Third line.

可见结果是这样的:

⦁             The first line in bullet list.
⦁   Second line.
⦁   Third line.

第一行文本开头之前插入了一堆空格。我不想这样。

当我从控件读回 RTF 时,现在是:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}{\f1\fnil\fcharset2 Symbol;}}

{\*\generator Riched20 10.0.14393}\viewkind4\uc1 

\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-180\li260\f0\fs24           \fs17 The first line in bullet list.\par

{\pntext\f1\'B7\tab}Second line.\par

{\pntext\f1\'B7\tab}Third line.\par

}

我读过类似 http://www.biblioscape.com/rtf15_spec.htm 的资源和类似的我得到关于RTF的一般想法:

该格式应该优雅地降级,因此,当执行老读者不支持的新内容时,老读者可以显示旧类型的额外格式,以获得新格式的某种不错的视觉表示,而老读者会忽略它不知道的标签。

对于列表,第一行设置某种样式,后面几行遵循该样式。我尝试修改上面格式中的所有数字常量,并且我看到渲染如何根据我更改的内容向左或向右移动,但额外的空格仍然存在。

我认为也很奇怪,当我从文本控件读回 RTF 时,有一个额外的 \fs24看起来出乎意料。

如果任何帮助或解决方案能够保留列表方面而不仅仅是直观地呈现列表,那也会很有帮助。原因是程序稍后将 RTF 转换为 HTML,如果它知道创建 <ul> 将会很有帮助。或<ol>直接标记,而不仅仅是例如项目符号和新段落。

最佳答案

RichTextBox 有一个 SelectionBullet 属性,可以为选定的文本打开项目符号。

如果你想为选定的文本设置项目符号,可以使用:

richTextBox1.SelectionBullet = true;

如果你想插入项目符号文本,你可以使用:

var i = richTextBox1.SelectionStart;
var txt = "Lorem\nipsum\ndolor\n";
richTextBox1.SelectedText = txt;
richTextBox1.Select(i, txt.Length);
richTextBox1.SelectionBullet = true;

关于c# - 带项目符号的 RTF 列表在第一行的缩进方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52293523/

相关文章:

c# - 如何用伪造的值表示可为空的值?

asp.net - 我的 pay pal 按钮不会链接到 paypal。它只刷新页面,为什么?

vb.net - VB.NET解决方案的SVN客户端忽略模式

c# - WebClient网站登录

c# - 如何使用 R.net 将 C# 中的数据表转换为 R 中的 data.fame

c# - 使用 mongodb C# 驱动程序进行分组和投影

mysql - 为搜索字符串构建 SQL 查询

c# - 错误CS0234 : The type or namespace name 'VisualStudio' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?

c# - 在 asp.net 中创建连接字符串/连接到数据库?

c# - 使用 XmlSerializer 重命名平面 xml 数组中的数组项