C# 如何检测带有自动省略号的System.Windows.Forms.Label是否实际显示省略号?

C# 如何检测带有自动省略号的System.Windows.Forms.Label是否实际显示省略号?,c#,winforms,label,ellipsis,C#,Winforms,Label,Ellipsis,我有一个Windows窗体应用程序,其中我在标签中显示一些客户端数据。 我已设置label.AutoEllipsis=true。 如果文本比标签长,则如下所示: Some Text Some longe... // label.Text is actually "Some longer Text" // Full text is displayed in a tooltip 这就是我想要的 但现在我想知道标签是否在运行时使用了自动省略号功能。 我怎样才能做到 解决方

我有一个Windows窗体应用程序,其中我在标签中显示一些客户端数据。 我已设置label.AutoEllipsis=true。
如果文本比标签长,则如下所示:

Some Text
Some longe... // label.Text is actually "Some longer Text"
              // Full text is displayed in a tooltip
这就是我想要的

但现在我想知道标签是否在运行时使用了自动省略号功能。 我怎样才能做到

解决方案

感谢max。现在我能够创建一个控件,尝试将整个文本放在一行中。如果有人感兴趣,以下是代码:

公共类AutosizeLabel
继承System.Windows.Forms.Label
Public将属性Text()重写为字符串
得到
返回MyBase.Text
结束
设置(ByVal值作为字符串)
MyBase.Text=值
ResetFontToDefault()
CheckFontsizeToBig()
端集
端属性
Public将属性Font()替换为System.Drawing.Font
得到
返回MyBase.Font
结束
设置(ByVal值为System.Drawing.Font)
MyBase.Font=value
currentFont=value
CheckFontsizeToBig()
端集
端属性
Private currentFont As Font=Me.Font
私有子CheckFontsizeToBig()
如果Me.PreferredWidth>Me.Width和Also Me.Font.SizeInPoints>0.25!然后
MyBase.Font=新字体(currentFont.FontFamily,Me.Font.SizeInPoints-0.25!,currentFont.Style,currentFont.Unit)
CheckFontsizeToBig()
如果结束
端接头
私有子ResetFontToDefault()
MyBase.Font=currentFont
端接头
末级

可能需要一些微调(使用设计器可见属性配置步长和最小值),但目前效果很好。

事实上,您的标签可能是多行的。在这种情况下,label.PreferredWidth没有帮助。但您可以使用:

private static bool IsShowingEllipsis(Label label)
{
    return label.PreferredWidth > label.Width;
}
    internal static bool IsElipsisShown(this Label @this)
    {
        Size sz = TextRenderer.MeasureText(@this.Text, @this.Font, @this.Size, TextFormatFlags.WordBreak);
        return (sz.Width > @this.Size.Width || sz.Height > @this.Size.Height);
    }

为什么不在运行时检查此属性?@Arseny:属性为true如果文本太大,标签“可以”使用省略号。对于小文本,没有任何更改,但属性仍然为true。谢谢,我使用一个控件更新了问题,该控件自动调整文本以适应标签@菲尔:说得也不错!这不适用于像Vasily Ivanov的解决方案那样是多行的标签。我同意,您的代码工作得非常完美。Max代码不起作用。这是更好的解决方案