1.插入以下方法
/// <summary> /// 读取控件的大小位置属性,保存在Tag里面 /// </summary> /// <param name="control"></param> void SetTag(Control control) { foreach (Control item in control.Controls) { item.Tag = item.Left.ToString() + "," + item.Top.ToString() + "," + item.Width.ToString() + "," + item.Height.ToString()+","; if (item.HasChildren) { SetTag(item); } } } /// <summary> /// 设置控件的大小位置 /// </summary> /// <param name="control"></param> /// <param name="scaleX"></param> /// <param name="scaleY"></param> void SetContrlos(Control control,double scaleX,double scaleY) { foreach (Control item in control.Controls) { string stag = (string)item.Tag; if (stag == null) return; string[] strings = stag.Split(','); item.Location = new Point((int)(double.Parse(strings[0]) * scaleX), (int)(double.Parse(strings[1]) * scaleY)); item.Size = new Size((int)(double.Parse(strings[2]) * scaleX), (int)(double.Parse(strings[3]) * scaleY)); if (item.HasChildren) { SetContrlos(item,scaleX,scaleY); } } }
2.在窗体的构造函数和大小事件中插入代码
public Form1() { InitializeComponent(); this.Tag = this.Width.ToString()+","+this.Height.ToString(); SetTag(this); } private void Form1_Resize(object sender, EventArgs e) { string stag=(string)this.Tag; if (stag == null) return; string[] strings=stag.Split(','); double x = (double)this.Width / Convert.ToDouble(strings[0]); double y = (double)this.Height / Convert.ToDouble(strings[1]); SetContrlos(this,x,y); }