Resize text size of a label when the text gets longer than the label size?

You can use my code snippet below. System needs some loops to calculate the label's font based on text size.

while(label1.Width < System.Windows.Forms.TextRenderer.MeasureText(label1.Text, 
     new Font(label1.Font.FontFamily, label1.Font.Size, label1.Font.Style)).Width)
{
    label1.Font = new Font(label1.Font.FontFamily, label1.Font.Size - 0.5f, label1.Font.Style);
}

Label scaling

private void scaleFont(Label lab)
{
    Image fakeImage = new Bitmap(1, 1); //As we cannot use CreateGraphics() in a class library, so the fake image is used to load the Graphics.
    Graphics graphics = Graphics.FromImage(fakeImage);

    SizeF extent = graphics.MeasureString(lab.Text, lab.Font);

    float hRatio = lab.Height / extent.Height;
    float wRatio = lab.Width / extent.Width;
    float ratio = (hRatio < wRatio) ? hRatio : wRatio;

    float newSize = lab.Font.Size * ratio;

    lab.Font = new Font(lab.Font.FontFamily, newSize, lab.Font.Style);
}

TextRenderer Approach pointed out by @ToolmakerSteve in the comments

private void ScaleFont(Label lab)
{
    SizeF extent = TextRenderer.MeasureText(lab.Text, lab.Font);

    float hRatio = lab.Height / extent.Height;
    float wRatio = lab.Width / extent.Width;
    float ratio = (hRatio < wRatio) ? hRatio : wRatio;

    float newSize = lab.Font.Size * ratio;

    lab.Font = new Font(lab.Font.FontFamily, newSize, lab.Font.Style);
}

Tags:

C#

Text

Size

Label