【问题标题】:C# Changing the Size of a button textC# 更改按钮文本的大小
【发布时间】:2017-03-09 05:36:01
【问题描述】:

当我更改按钮的大小时,我希望按钮字体的大小动态变化。 到目前为止,我已将按钮放置在正确的位置,并且当我调整表单大小时,按钮的大小会发生变化。但是当 Button 对于 Button 中的文本变得太小时,字母就会“掉出”。

如何根据按钮大小本身更改按钮文本的大小?

【问题讨论】:

  • WinForms 对此感到抱歉...

标签: c# winforms button resize


【解决方案1】:

要使按钮中的文本具有响应性,请使用以下代码:

    //paint event from button:
    private void button1_Paint(object sender, PaintEventArgs e)
    {
        float fontSize = NewFontSize(e.Graphics, button1.Size, button1.Font, button1.Text);

        // set font with Font Class and the returned Size from NewFontSize();
        Font f = new Font("Arial", fontSize, FontStyle.Bold);
        button1.Font = f;
    }

    // method to calculate the size for the font:
    public static float NewFontSize(Graphics graphics, Size size, Font font, string str)
    {
        SizeF stringSize = graphics.MeasureString(str, font);
        float wRatio = size.Width / stringSize.Width;
        float hRatio = size.Height / stringSize.Height;
        float ratio = Math.Min(hRatio, wRatio);
        return font.Size * ratio;
    }

实际代码示例:

如您所见,按钮内的字体可以调整大小。和文字 不会被抛出按钮。您也可以将其用于其他 控制器也是如此。

【讨论】:

  • 以及如何随按钮的大小动态改变它?
  • 我改变了我的帖子,我想出了如何做到这一点。 @Stujo
【解决方案2】:

由于您没有提供有关字体、大小等的详细信息,因此我将做一个一般性的 sn-p 来为您指明正确的方向。请根据需要修改其参数。

Button button = (Button)sender;
button.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

或者更简单的东西

button.Font = new Font("Microsoft Sans Serif", 10);

【讨论】:

  • 以及如何随按钮的大小动态改变它?
  • button.Font = new Font(button.Font.FontFamily, button.Font.Size*1.1f);?有没有 *1.1f 部分?...
【解决方案3】:

您想先检查按钮的高度和宽度。

然后将 1pt 字体的循环编码为 200 之类的东西

在每个循环调用TextRenderer.MeasureText(button.text, button.font); 中传递相同的字体,但使用循环中的磅值。

然后验证MeasureText 的高度和宽度是否符合您给自己设置的按钮限制。如果合适,请尝试下一个更大的尺寸。如果不合适,最好的字体大小,如果是前一个。

【讨论】:

  • 以及如何随按钮的大小动态改变它?
  • 绑定到按钮的一个事件来触发这个代码就像SizeChanged事件
【解决方案4】:

对于动态变化,我会尝试这样的事情。 但它只是解决动态变化。要检查文本宽度,您需要为此代码实现更多功能。

    public class MyButton : Button
{
    public MyButton()
    {

    }

    public override bool AutoSize {
        get {
            return false;
        }
        set {
            base.AutoSize = false;
        }
    }

    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);

        Font = new Font(this.Font.FontFamily,Height-10,this.Font.Style,GraphicsUnit.Pixel);

    }
}

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2020-05-08
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多