Winform 窗体控件随窗体自动(等比例)调整大小
新建窗体程序了,添加窗体事件Load(加载窗体时)、Resize(调整控件大小时)。自定义方法setTag(获取控件的width、height、left、top、字体大小等信息的值)、setControls(根据窗体大小调整控件大小)。
1 float X, Y;//X表示窗体的宽度,Y表示窗体的高度 2 private void Form1_Load(object sender, EventArgs e) 3 { 4 //this.Resize += new EventHandler(Form1_Resize); 5 X = this.Width;//赋值初始窗体宽度 6 Y = this.Height;//赋值初始窗体高度 7 setTag(this); 8 } 9 /// <summary> 10 /// 调整控件大小时 11 /// </summary> 12 /// <param name="sender"></param> 13 /// <param name="e"></param> 14 private void Form1_Resize(object sender, EventArgs e) 15 { 16 float newX = this.Width / X;//获取当前宽度与初始宽度的比例 17 float newY = this.Height / Y;//获取当前高度与初始高度的比例 18 setControls(newX, newY, this); 19 this.Text = "窗体宽:" + this.Width.ToString() + " 窗体高:" + this.Height.ToString();//窗体标题栏 20 } 21 /// <summary> 22 /// 获取控件的width、height、left、top、字体大小的值 23 /// </summary> 24 /// <param name="cons">要获取信息的控件</param> 25 private void setTag(Control cons) 26 {//遍历窗体中的控件 27 foreach (Control con in cons.Controls) 28 { 29 con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; 30 //if (con.Controls.Count > 0) 31 //{ 32 // setTag(con); 33 //} 34 } 35 } 36 /// <summary> 37 /// 根据窗体大小调整控件大小 38 /// </summary> 39 /// <param name="newX"></param> 40 /// <param name="newY"></param> 41 /// <param name="cons"></param> 42 private void setControls(float newX, float newY, Control cons) 43 { 44 //遍历窗体中的控件,重新设置控件的值 45 foreach (Control con in cons.Controls) 46 { 47 string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//获取控件的Tag属性值,并分割后存储字符串数组 48 49 float a = Convert.ToSingle(mytag[0]) * newX;//根据窗体缩放比例确定控件的值,宽度//89*300 50 con.Width = (int)(a);//宽度 51 52 a = Convert.ToSingle(mytag[1]) * newY;//根据窗体缩放比例确定控件的值,高度//12*300 53 con.Height = (int)(a);//高度 54 55 a = Convert.ToSingle(mytag[2]) * newX;//根据窗体缩放比例确定控件的值,左边距离// 56 con.Left = (int)(a);//左边距离 57 58 a = Convert.ToSingle(mytag[3]) * newY;//根据窗体缩放比例确定控件的值,上边缘距离 59 con.Top = (int)(a);//上边缘距离 60 61 Single currentSize = Convert.ToSingle(mytag[4]) * newY;//根据窗体缩放比例确定控件的值,字体大小 62 con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);//字体大小 63 64 //if (con.Controls.Count > 0) 65 //{ 66 // setControls(newX, newY, con); 67 //} 68 69 //Remarks: 70 //控件当前宽度:控件初始宽度=窗体当前宽度:窗体初始宽度 71 //控件当前宽度=控件初始宽度*(窗体当前宽度/窗体初始宽度) 72 } 73 }
参考借鉴:http://jingyan.baidu.com/article/77b8dc7fe801006174eab6db.html