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

C# 添加省略号时,标签文本会移动几个像素,c#,winforms,C#,Winforms,我有一个带有AutoSize=false和AutoEllipsis=true的标签,我注意到如果将省略号添加到此标签的文本中,它会移动几个像素,如以下屏幕截图所示: 为什么??我做错了什么?我怎样才能修好它 提前感谢。解决此问题的最简单方法是将标签的UseCompatibleTextRendering属性设置为True。这似乎是一个问题 当文本太大时,它会对齐顶部,启用(2)或不启用(1)自动省略号 不幸的是,提议的解决方案往往看起来相当丑陋 要解决此问题(3),您可以使用下面的简单函数,

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

为什么??我做错了什么?我怎样才能修好它


提前感谢。

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

这似乎是一个问题

当文本太大时,它会对齐顶部,启用(2)或不启用(1)
自动省略号

不幸的是,提议的解决方案往往看起来相当丑陋

要解决此问题(3),您可以使用下面的简单函数,也可以编写一个集成此功能的
标签
子类..:

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;
}
字符串简化文本(标签lbl,字符串文本)
{
char ell=(char)0x00002026;
标签=文本;
字符串redString=文本;
使用(字体=新字体(lbl.Font,FontStyle.Bold))
使用(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(textWidthlbl.ClientSize.Width);
}
返回redString+ell;
}

在一些粗体字体上,省略号字符看起来像下划线;在这种情况下,只需将其替换为带有2-3个点的字符串

将标签页边距属性的顶部和底部设置为3似乎适合我。因此,将您的边距设置为(3,3,3)

它给我一种奇怪的感觉,你没有做错什么,这是一个错误。与副本中的答案相反,最好的解决方案是编写自己的AutoEllisPI代码。有些项目是存在的,但都相当复杂。不幸的是,你的解决方案在我的情况下似乎不起作用——标签中的文本仍然对齐。我这样使用它--
this.label.Text=ReducedText(this.label,str)Hm,用途如预期。假设TextAlignment是中间偏左的,您可能需要增加松弛度(3),我不得不添加一点;试试5-8……好的。你能解释一下标签吗:这里显示的是什么图像?让我们来看看。这是一个简单的标签,有以下设置--,