Hungry Mind , Blog about everything in IT - C#, Java, C++, .NET, Windows, WinAPI, ...

Label with vertical auto sizing

В проекте потребовалась лейба с автоподгоном высоты и фиксированной в пределах формы шириной, чтобы работал AutoEllipsis. Проблема в том, что AutoSize меняет также ширину лейбы. Сначала в голову пришла мысль считать высоту текста через Graphics или TextRenderer, но покопавшись в исходниках класса Label я выяснил, что его метод GetPreferredSize возвращает требуемый размер. Приятно то как! В итоге получился такой вот кусочек класса-наследника Label:

/// <summary>
/// See <see cref="Label.OnFontChanged"/>.
/// </summary>
protected override void OnFontChanged(EventArgs e)
{
    base.OnFontChanged(e);

    adjustHeight();
}

/// <summary>
/// See <see cref="Label.OnTextChanged"/>.
/// </summary>
protected override void OnTextChanged(EventArgs e)
{
    base.OnTextChanged(e);

    adjustHeight();
}

#endregion

#region Private methods

/// <summary>
/// Adjust <see cref="Control.Height"/> so that the text is fully visible vertically.
/// </summary>
private void adjustHeight()
{
    if (AutoSize)
    {
        return;
    }
    Height = PreferredSize.Height;
}

0 коммент.:

Отправить комментарий

Copyright 2007-2011 Chabster