【发布时间】:2017-03-09 05:36:01
【问题描述】:
当我更改按钮的大小时,我希望按钮字体的大小动态变化。 到目前为止,我已将按钮放置在正确的位置,并且当我调整表单大小时,按钮的大小会发生变化。但是当 Button 对于 Button 中的文本变得太小时,字母就会“掉出”。
如何根据按钮大小本身更改按钮文本的大小?
【问题讨论】:
-
WinForms 对此感到抱歉...
当我更改按钮的大小时,我希望按钮字体的大小动态变化。 到目前为止,我已将按钮放置在正确的位置,并且当我调整表单大小时,按钮的大小会发生变化。但是当 Button 对于 Button 中的文本变得太小时,字母就会“掉出”。
如何根据按钮大小本身更改按钮文本的大小?
【问题讨论】:
要使按钮中的文本具有响应性,请使用以下代码:
//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;
}
实际代码示例:
如您所见,按钮内的字体可以调整大小。和文字 不会被抛出按钮。您也可以将其用于其他 控制器也是如此。
【讨论】:
由于您没有提供有关字体、大小等的详细信息,因此我将做一个一般性的 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 部分?...
您想先检查按钮的高度和宽度。
然后将 1pt 字体的循环编码为 200 之类的东西
在每个循环调用TextRenderer.MeasureText(button.text, button.font); 中传递相同的字体,但使用循环中的磅值。
然后验证MeasureText 的高度和宽度是否符合您给自己设置的按钮限制。如果合适,请尝试下一个更大的尺寸。如果不合适,最好的字体大小,如果是前一个。
【讨论】:
SizeChanged事件
对于动态变化,我会尝试这样的事情。 但它只是解决动态变化。要检查文本宽度,您需要为此代码实现更多功能。
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);
}
}
【讨论】: