Для System.Windows.Forms.Label
есть ли способ автоматической установки размера шрифта метки в зависимости от размера метки?Размер шрифта AutoFit Размер шрифта
2
A
ответ
3
class AutoFontLabel : Label
{
public AutoFontLabel()
: base()
{
this.AutoEllipsis = true;
}
protected override void OnPaddingChanged(EventArgs e)
{
UpdateFontSize();
base.OnPaddingChanged(e);
}
protected override void OnResize(EventArgs e)
{
UpdateFontSize();
base.OnResize(e);
}
private void UpdateFontSize()
{
int textHeight = this.ClientRectangle.Height
- this.Padding.Top - this.Padding.Bottom;
if (textHeight > 0)
{
this.Font = new Font(this.Font.FontFamily,
textHeight, GraphicsUnit.Pixel);
}
}
}
Благодаря AMissico, который обновил элемент управления для обработки прокладки. Мы видим, как изменяются настройки Padding и TextAlign в дизайнере.
0
Я думаю, вам нужно будет переопределить метод краски, чтобы решить эту проблему, и нарисуйте свой собственный текст. Но вам нужно будет использовать метод MeasureString для GDI +, чтобы получить размер текста, поэтому процедура, которая скажет вам правильный размер шрифта, будет работать в режиме проб и ошибок.
+0
Я подумал скорее о трюке с меткой. OnResize + label.Font = something – serhio
Почему дополнительное умножение с 1f? Не будет ли бросок быстрее/чище? (Не то, чтобы это важно) – AMissico
Означает ли это изменение размера дополнительной метки, потому что вы меняете шрифт внутри OnResize? – AMissico
нет, я попробовал, не вызывает лишнюю замену ярлыков; базовая OnResieze устанавливается после. – serhio