Как определить, действительно ли многоточие System.Windows.Forms.Label с AutoEllipsis отображает многоточие? - PullRequest
5 голосов
/ 10 июня 2010

У меня есть приложение Windows Forms, где я отображаю некоторые данные клиента в метке. Я установил 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

Может потребоваться точная настройка (настроить размер шага и минимальное значение с помощью видимых свойств дизайнера), но на данный момент он работает довольно хорошо.

Ответы [ 2 ]

14 голосов
/ 10 июня 2010
private static bool IsShowingEllipsis(Label label)
{
    return label.PreferredWidth > label.Width;
}
2 голосов
/ 06 мая 2017

На самом деле ваш ярлык может быть многострочным.В этом случае 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);
    }
...