【问题标题】:Is there a way to specify full justification for a paragraph of text in a RichTextBox?有没有办法为 RichTextBox 中的一段文本指定完整的理由?
【发布时间】:2012-07-15 19:17:55
【问题描述】:

我目前正在使用从 RichTextBox 控件派生的控件生成用于打印的报告。我有几个段落缩进了 .SelectionIndent.SelectionRightIndent 属性,但我也希望使它们完全对齐(使用微妙的子字符间距,就像 Microsoft Word 所做的那样)。

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

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

不管怎样,我使用的是 msftedit.dll 中的 RICHEDIT50W,不能依赖安装了任何 Word 版本的客户端。

【问题讨论】:

    标签: .net winforms richtextbox rtf


    【解决方案1】:

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

    注意: RichEdit 2.0 段落是合理的。 RichEdit 3.0 之前的 Rich Edit 控件显示与左边距对齐的文本。

            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 api 的相应 P/Invokes]

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 2021-04-20
      • 2020-11-14
      • 2013-02-03
      相关资源
      最近更新 更多