我正在使用.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
。
如果任何帮助或解决方案可以保留 list 方面,而不仅仅是直观地呈现列表,这也将有所帮助。原因是该程序稍后会将RTF转换为HTML,如果它知道直接创建<ul>
或<ol>
标签,而不是仅创建项目符号和新段落,将很有帮助。
答案 0 :(得分:2)
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;