TextFormatFlags枚举中EndEllipsis和WordEllipsis之间的区别是什么?

时间:2016-04-14 06:59:21

标签: c# winforms text-rendering

根据我对documentation的理解,当使用TextFormatFlags.EndEllipsis时,应修剪文本以适合显示矩形并替换为省略号:

  

EndEllipsis |删除修剪线的末尾,并用省略号替换它们。

使用TextFormatFlags.WordEllipsis时,应将文本修剪为适合显示矩形的最后一个单词,并添加省略号:

  

WordEllipsis |将线条修剪为最近的单词,并在修剪线的末尾放置省略号。

但是,我似乎无法找到这两者之间的任何区别。

这是我的测试控件的代码:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
        this.Text = "This it my text. It's long enough to get cut in display.";
    }


    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        var flags = (this.IsWordEllipsis) ? TextFormatFlags.WordEllipsis : TextFormatFlags.EndEllipsis;
        TextRenderer.DrawText(e.Graphics, this.Text, this.Font, e.ClipRectangle, this.ForeColor, flags);
    }

    private bool _IsWordEllipsis;

    public bool IsWordEllipsis
    {
        get { return _IsWordEllipsis; }
        set { _IsWordEllipsis = value; this.Invalidate(); }
    }
}

无论我设置IsWordEllipsis属性的值是什么 - 文本总是呈现为
This it my text. It's long eno...

不应该使用WordEllipsis标志将显示的字符串修剪为最后一个完整的单词?
This it my text. It's long ...

1 个答案:

答案 0 :(得分:2)

内部TextRenderer.DrawText调用DrawText函数

相应的标志是:

  

DT_WORD_ELLIPSIS :截断任何不适合的词   矩形并添加椭圆。

     

DT_END_ELLIPSIS 对于显示的文字,如果字符串的结尾没有   适合矩形,它被截断并添加椭圆。如果一个   不在字符串末尾的单词超出了限制   矩形,它被截断而没有椭圆。

我已经为WordEllipsis解释了与{1}}相同的.NET文档,但上面的句子可能更好地解释了这个选项应该做什么。

如果还不清楚,请看一下这个试图渲染var quote = "Not every thing that\n can be counted counts,\n and not everything that\n counts can be counted.";的简单示例

enter image description here