【问题标题】:What's the Difference between EndEllipsis and WordEllipsis in TextFormatFlags enum?TextFormatFlags 枚举中的 EndEllipsis 和 WordEllipsis 有什么区别?
【发布时间】:2016-08-05 13:55:04
【问题描述】:

根据我对documentation的理解,在使用TextFormatFlags.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 ...)

【问题讨论】:

    标签: c# winforms text-rendering


    【解决方案1】:

    在内部TextRenderer.DrawText 调用DrawText 函数

    对应的标志是:

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

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

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

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

    【讨论】:

    • 谢谢!我可能应该考虑过自己测试多行字符串。
    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多