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 коммент.:
Отправить комментарий