Winform 控件大小随窗体大小等比

一、在From1.cs中输入如下代码

• public Form1()
• {
• InitializeComponent();
• x = this.Width;
• y = this.Height;
• setTag(this);
• }

二、其中setTag(this);为控件等比例缩放的方法

( 控件大小随窗体大小等比例缩放)

private float x;//定义当前窗体的宽度
private float y;//定义当前窗体的高度
private void setTag(Control cons)
{
    foreach (Control con in cons.Controls)
    {
        con.Tag = con.Width + ";" + con.Height + ";" + con.Left + ";" + con.Top + ";" + con.Font.Size;
        if (con.Controls.Count > 0)
        {
            setTag(con);
        }
    }
}
private void setControls(float newx, float newy, Control cons)
{
    //遍历窗体中的控件,重新设置控件的值
    foreach (Control con in cons.Controls)
    {
        //获取控件的Tag属性值,并分割后存储字符串数组
        if (con.Tag != null)
        {
            string[] mytag = con.Tag.ToString().Split(new char[] { ';' });
            //根据窗体缩放的比例确定控件的值
            con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx);//宽度
            con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy);//高度
            con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx);//左边距
            con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy);//顶边距
            Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小
            con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
            if (con.Controls.Count > 0)
            {
                setControls(newx, newy, con);
            }
        }
    }
}

三、Form事件Resize方法

private void Form1_Resize(object sender, EventArgs e)
{
    float newx = (this.Width) / x;
    float newy = (this.Height) / y;
    setControls(newx, newy, this);
}
发布了138 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_39332529/article/details/100186293