首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当文本长度超过标签大小时,调整标签的文本大小?

当文本长度超过标签大小时,调整标签的文本大小?
EN

Stack Overflow用户
提问于 2012-03-02 11:52:23
回答 8查看 101.8K关注 0票数 23

我有一个显示文件名的标签..为了进行设计,我不得不将标签的AutoSize设置为False

因此,当文件名文本长度超过标签大小时..就像照片上的一样。

代码语言:javascript
复制
label1.Size = new Size(200, 32);
label1.AutoSize = false;

当文本长度超过标签大小时,如何自动调整文本大小以适合标签大小?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-10 18:05:47

你可以使用我下面的代码片段。系统需要一些循环来根据文本大小计算标签的字体。

代码语言:javascript
复制
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);
}
票数 31
EN

Stack Overflow用户

发布于 2014-08-22 21:53:19

标签缩放

代码语言:javascript
复制
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);
}

@ToolmakerSteve在评论中指出的TextRenderer方法

代码语言:javascript
复制
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);
}
票数 17
EN

Stack Overflow用户

发布于 2013-12-09 03:31:38

基于@brgerner提供的article,我将在这里提供替代实现,因为标记为答案的实现不如下面的高效或完整:

代码语言:javascript
复制
public class FontWizard
{
    public static Font FlexFont(Graphics g, float minFontSize, float maxFontSize, Size layoutSize, string s, Font f, out SizeF extent)
    {
        if (maxFontSize == minFontSize)
            f = new Font(f.FontFamily, minFontSize, f.Style);

        extent = g.MeasureString(s, f);

        if (maxFontSize <= minFontSize)
            return f;

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

        float newSize = f.Size * ratio;

        if (newSize < minFontSize)
            newSize = minFontSize;
        else if (newSize > maxFontSize)
            newSize = maxFontSize;

        f = new Font(f.FontFamily, newSize, f.Style);
        extent = g.MeasureString(s, f);

        return f;
    }

    public static void OnPaint(object sender, PaintEventArgs e, string text)
    {
        var control = sender as Control;
        if (control == null)
            return;

        control.Text = string.Empty;    //delete old stuff
        var rectangle = control.ClientRectangle;

        using (Font f = new System.Drawing.Font("Microsoft Sans Serif", 20.25f, FontStyle.Bold))
        {
            SizeF size;
            using (Font f2 = FontWizard.FlexFont(e.Graphics, 5, 50, rectangle.Size, text, f, out size))
            {
                PointF p = new PointF((rectangle.Width - size.Width) / 2, (rectangle.Height - size.Height) / 2);
                e.Graphics.DrawString(text, f2, Brushes.Black, p);
            }
        }
    }
}

和用法:

代码语言:javascript
复制
val label = new Label();
label.Paint += (sender, e) => FontWizard.OnPaint(sender, e, text);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9527721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档