新建窗體程序了,添加窗體事件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