Как определить, действительно ли System.Windows.Forms.Label с AutoEllipsis отображает многоточие?

У меня есть приложение 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

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


person Jürgen Steinblock    schedule 10.06.2010    source источник
comment
почему бы вам не проверить это свойство во время выполнения?   -  person Arseny    schedule 10.06.2010
comment
@Arseny: свойство имеет значение true, метка может использовать многоточие, если текст слишком большой. Для небольшого текста ничего не меняется, но свойство остается верным.   -  person Jürgen Steinblock    schedule 10.06.2010


Ответы (2)


Фактически, ваша этикетка может быть многострочной. В этом случае 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);
    }
person Vasily Ivanov    schedule 06.05.2017
comment
Я согласен, ваш код работает идеально. Макс код не сработал. - person Matheus Miranda; 24.11.2017
comment
Это превосходное решение - person Dr. Cogent; 23.08.2019

person    schedule
comment
Спасибо, я обновил вопрос, добавив элемент управления, который автоматически подгоняет текст под метку. @Phil: тоже хорошая мысль! - person Jürgen Steinblock; 10.06.2010
comment
Это не работает для многострочных меток, как решение Василия Иванова. - person Dr. Cogent; 23.08.2019