通过动态更改Fontsize来调整大小调整按钮控件中的文本

时间:2014-01-13 12:57:50

标签: c# winforms button resize

我有一个应用程序,每隔5秒就会在按钮上设置不同长度的文本。 如何调整文本大小以使其适合按钮。 另外我需要在调整窗口大小时调整字体大小。(调整大小窗口时我的按钮大小会增加,因为我在其上使用了dock属性。

以下是我以前使用的代码,但是当文本长度为2或更短时,它的工作效果不是很好。(文本弹出一点不在控件中)

public static void FitControlFont(Control control)
        {
            if (control.Text.Length == 0)
            {
                return;
            }

            try
            {
                Font currentFont = control.Font;
                Graphics graphics = control.CreateGraphics();
                SizeF newSize = graphics.MeasureString(control.Text, control.Font);
                graphics.Dispose();

                float factorX = control.Width / newSize.Width;
                float factorY = control.Height / newSize.Height;
                float factor = factorX > factorY ? factorY : factorX;
                if (control.InvokeRequired)
                {
                    control.Invoke(new MethodInvoker(delegate { control.Font = new Font(currentFont.Name, currentFont.SizeInPoints * factor); }));
                }
                else
                {
                    control.Font = new Font(currentFont.Name, currentFont.SizeInPoints * factor);
                }
            }
            catch (Exception ex)
            {
                if (Exceptions.IsCritical(ex))
                {
                    throw;
                }

                return;
            }
        }

1 个答案:

答案 0 :(得分:0)

您可以将按钮的autosize属性设置为true,这样可以使宽度适合内容。

关于更改字体,您可以处理按钮的SizeChanged(因为您设置了它的dock属性)并确定字体相对于表单高度的某些比率:

private void button1_SizeChanged(object sender, EventArgs e)
{
     button1.Font = new Font(button1.Font.FontFamily, this.Size.Height / 10) ;
}