The form control of the C# host computer module changes with the size of the form

In the actual host computer, for example, dragging the frame or the full screen of the form often occurs, but it is often impossible to write in the full screen state when drawing the form. And in the industrial computer, due to cost control reasons, often choose the equipment with price offset, or the form of touch screen, so when the resolution is different, it is also necessary to scale up and down the control proportionally. Therefore, when the box is set to automatically change the size in the program
, Controls follow the transformation

public partial class Form1 : Form
    {
    
    
        private float x;//定义当前窗体的宽度
        private float y;//定义当前窗体的高度
        bool bFirstSetup = true;//开启工作
        public Form1()
        {
    
    
            InitializeComponent();//系统自带
            // 窗体自适应
            x = this.Width;
            y = this.Height;
            setUniformScale(this);
        }
        #region // 控件大小随窗体大小等比例缩放

        // 控件大小随窗体大小等比例缩放
        private void setUniformScale(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)
                {
    
    
                    setUniformScale(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);
                    }
                }
            }
        }
        private void MainForm_Resize(object sender, EventArgs e)
        {
    
    
            float newx = (this.Width) / x;
            float newy = (this.Height) / y;
            setControls(newx, newy, this);

            if (bFirstSetup)
                return;


        }
        #endregion
    }

Just design the size transformation function in the form
insert image description here

Guess you like

Origin blog.csdn.net/m0_51559565/article/details/129798347