C#更改按钮文本的大小

时间:2016-10-26 18:07:26

标签: c# winforms button resize

当我改变Button的大小时,我希望Button字体的大小动态变化。 到目前为止,当我调整表单大小时,我已将按钮放在正确的位置,并且按钮的大小会发生变化。但是当按钮变为小按钮时,按钮中的文字只会“掉落”。进行。

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

4 个答案:

答案 0 :(得分:3)

要使按钮中的文字响应,请使用以下代码:

    //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;
    }

行动代码示例:

Example of code in action

  

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

答案 1 :(得分:0)

由于您没有提供有关字体,大小等等的详细信息,因此我会做一般性摘要,只是为了指出正确的方向。请根据您的需要修改其参数。

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);

答案 2 :(得分:0)

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

然后将1pt字体上的循环编码为200

在每个循环调用中TextRenderer.MeasureText(button.text, button.font);传递相同的字体,但是循环中的点大小。

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

答案 3 :(得分:0)

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

    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);

    }
}