添加省略号时,标签文本会移动几个像素

时间:2015-03-25 13:08:30

标签: c# winforms

我有AutoSize = falseAutoEllipsis = true的标签,我注意到如果将省略号添加到此标签的文本中,它会移动几个像素,如下面的屏幕截图所示:

enter image description here

enter image description here

为什么呢?我究竟做错了什么?我该如何解决?

提前致谢。

3 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是将标签的UseCompatibleTextRendering属性设置为True。

答案 1 :(得分:1)

这似乎是bug

每当文本太大时,它与顶部对齐,使用(2)或不使用(1)AutoEllipsis

enter image description here

不幸的是,提出的解决方案通常看起来很丑陋。

要解决方法(3),您可以使用类似下面的简单函数,也可以编写一个集成了函数的Label子类。:

string ReducedText(Label lbl, string text)
{
    char ell = (char)0x00002026;

    lbl.Tag = text;
    string redString = text;
    using (Font font = new Font(lbl.Font, FontStyle.Bold))
    using (Graphics G = lbl.CreateGraphics())
    {
        G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        float elltWidth = TextRenderer.MeasureText(G, ell.ToString(), font).Width;
        float textWidth = TextRenderer.MeasureText(G, redString, font).Width;
        elltWidth += lbl.Padding.Left + lbl.Padding.Right ;
        if (textWidth < lbl.ClientSize.Width) return text;  // maybe watch padding!
        SizeF s = SizeF.Empty;
        do
        {
            redString = redString.Substring(0, redString.Length - 1);
            s = TextRenderer.MeasureText(G, redString, font);
            // Console.WriteLine(s.Width + "  " + lbl.ClientSize.Width + " " + redString);
        } while (s.Width + elltWidth > lbl.ClientSize.Width);
    }
    return redString + ell;
}

在一些粗体字体上,省略号字符看起来像下划线;在这种情况下,只需用2-3点的字符串替换它。!

答案 2 :(得分:0)

将标签的margin属性的顶部和底部设置为3似乎对我来说是可行的。因此,将您的边距设置为(3,3,3,3)!