.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