C#使控件随窗体变化而变化的两种方法

来源:互联网 发布:vmware中文破解版 mac 编辑:程序博客网 时间:2024/04/30 15:25

第一种:

float x=0;        float y=0;        private void Frm_Resize(object sender, System.EventArgs e)        {            float  newx = (this.Width )/ x;            float newy = this.Height / y;            setConstrols(newx, newy, this);            }        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 setConstrols(float newx,float newy,Control  cons)        {            foreach (Control  con in cons .Controls )            {                string[] mytag = con.Tag.ToString().Split(new char[] { ':' });                float a = Convert.ToSingle(mytag[0]) * newx;                con.Width = (int)a;                a=Convert.ToSingle(mytag[1]) * newy;                con.Height = (int)(a);                a=Convert.ToSingle(mytag[2]) * newx;                con.Left = (int)(a);                a=Convert.ToSingle(mytag[3]) * newy;                con.Top = (int)(a);                Single currentSize = Convert.ToSingle (mytag[4]) * newy;                con .Font =new Font (con.Font .Name ,currentSize,con.Font .Style ,con.Font .Unit );                if(con.Controls .Count >0)                {                    setConstrols (newx ,newy ,con );                }            }        }        private void Frm_Load(object sender, System.EventArgs e)        {            x=this.Width ;            y=this.Height ;            setTag(this);            this.Resize +=new EventHandler(Frm_Resize);   }


 

第二种:

static float x;        static float y;        int[][] con;        float[] cc;private void Frm_dqadf_Load(object sender, EventArgs e)        {            x = this.Width;            y = this.Height;            con=new int[Controls.Count][];            cc = new float[Controls.Count];            for (int i = 0; i < Controls.Count; i++)            {                con[i] = new int[4];                con[i][0] = Controls[i].Top;                con[i][1] = Controls[i].Height;                con[i][2] = Controls[i].Left;                con[i][3] = Controls[i].Width;                cc[i] = Controls[i].Font.Size;            }        }private void Frm_dqadf_Resize(object sender, EventArgs e)        {            float h = this.Height / y;            float w = this.Width / x;            for (int i = 0; i < Controls.Count; i++)            {                Controls[i].Top=(int)(con[i][0]*h);                Controls[i].Height = (int)(con[i][1] * h);                Controls[i].Left = (int)(con[i][2] * w);                Controls[i].Width = (int)(con[i][3] * w);                float currentSize=cc[i]*h;                Controls[i].Font = new Font(Controls[i].Font.Name, currentSize, Controls[i].Font.Style, Controls[i].Font.Unit);            }        }