.net 自动调整标签字体大小
对于.net 自动调整标签字体大小,.net,winforms,font-size,.net,Winforms,Font Size,对于系统.Windows.Forms.Label是否有方法根据标签大小自动调整标签字体大小?我认为您需要覆盖绘制方法来解决此问题,并在自己的文本上绘制。但是,您必须使用GDI+的MeasureString方法来获得文本的大小,因此告诉您正确字体大小的例程将以试错的方式工作 class AutoFontLabel : Label { public AutoFontLabel() : base() { this.AutoEllipsis = true;
系统.Windows.Forms.Label
是否有方法根据标签大小自动调整标签字体大小?我认为您需要覆盖绘制方法来解决此问题,并在自己的文本上绘制。但是,您必须使用GDI+的MeasureString方法来获得文本的大小,因此告诉您正确字体大小的例程将以试错的方式工作
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更新了控件以处理填充。我们可以看到在设计器中更改填充和TextAlign是如何受到影响的 我想用label.OnResize+label.Font=something玩个把戏为什么要用1f进行额外的乘法?石膏不是更快/更干净吗?(这并不重要)这是否会因为您在OnResize中更改字体而导致额外的标签大小调整?不,我尝试过,不会导致额外的标签大小调整;base OnResieze设置在+1之后,我喜欢它。聪明。我还要补充一点,你应该考虑使用填充。这将删除1.6f的硬编码,您可以通过设计器调整填充。@AMissivo:是的,我可以使用填充,但恐怕这不会消除比例:1.6f