有没有办法为RichTextBox中的一段文本指定完全对齐?

时间:2012-07-15 19:17:56

标签: .net winforms richtextbox rtf

我正在使用从RichTextBox控件派生的控件生成打印报告。我有几段用.SelectionIndent.SelectionRightIndent属性缩进,但我也想让它们完全对齐(微妙的子字符间距,就像Microsoft Word一样)。

.SelectionAlignment属性可用,但只提供LeftCenterRight对齐。

有没有办法在RichTextBox中指定完整对齐?如果有必要,我愿意深入研究底层的RTF协议(如果协议本身支持这个功能),但是我不愿意创建格式化为完全对齐的文本位图以嵌入到文档中。

对于它的价值,我使用msftedit.dll中的RICHEDIT50W,并且不能依赖安装了任何版本Word的客户端。

1 个答案:

答案 0 :(得分:3)

您可以扩展RichTextBox控件,如this&将PARAFORMAT2 structure's段落对齐成员wAlignment设置为 PFA_JUSTIFY。要使用此成员set the PFM_ALIGNMENT flag in the dwMask member

NB: RichEdit 2.0 段落是合理的。早于RichEdit 3.0的丰富编辑控件显示与左边距对齐的文本。

        PARAFORMAT2 fmt = new PARAFORMAT2();
        fmt.cbSize = Marshal.SizeOf( fmt );
        fmt.dwMask = PFM_ALIGNMENT;
        fmt.wAlignment = ( short )value; /// PFA_JUSTIFY here.

        // Set the alignment.
        SendMessage( new HandleRef( this, Handle ),
                     EM_SETPARAFORMAT,
                     SCF_SELECTION, ref fmt );

[你必须编写WIN32 apis的相应P / Invokes,如示例链接所示]