6

我有一个 Windows 窗体应用程序,我在标签中显示一些客户端数据。我设置了 label.AutoEllipsis = true。
如果文本比标签长,它看起来像这样:

Some Text
Some longe... // label.Text is actually "Some longer Text"
              // Full text is displayed in a tooltip

这就是我想要的。

但现在我想知道标签是否在运行时使用了 AutoEllipsis 功能。我如何做到这一点?

解决方案

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

Public Class AutosizeLabel
    Inherits System.Windows.Forms.Label

    Public Overrides Property Text() As String
        Get
            Return MyBase.Text
        End Get
        Set(ByVal value As String)
            MyBase.Text = value

            ResetFontToDefault()
            CheckFontsizeToBig()
        End Set
    End Property

    Public Overrides Property Font() As System.Drawing.Font
        Get
            Return MyBase.Font
        End Get
        Set(ByVal value As System.Drawing.Font)
            MyBase.Font = value

            currentFont = value

            CheckFontsizeToBig()
        End Set
    End Property


    Private currentFont As Font = Me.Font
    Private Sub CheckFontsizeToBig()

        If Me.PreferredWidth > Me.Width AndAlso Me.Font.SizeInPoints > 0.25! Then
            MyBase.Font = New Font(currentFont.FontFamily, Me.Font.SizeInPoints - 0.25!, currentFont.Style, currentFont.Unit)
            CheckFontsizeToBig()
        End If

    End Sub

    Private Sub ResetFontToDefault()
        MyBase.Font = currentFont
    End Sub

End Class

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

4

2 回答 2

14
private static bool IsShowingEllipsis(Label label)
{
    return label.PreferredWidth > label.Width;
}
于 2010-06-10T09:48:09.190 回答
6

事实上,您的 Lable 可能是多行的。在这种情况下, label.PreferredWidth 将无济于事。但是你可以使用:

    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);
    }
于 2017-05-06T15:27:41.003 回答