一、首先定義全局變量
1 private float X;//當前窗體的寬度 2 private float Y;//當前窗體的高度 3 private bool IsFirst = true;
二、定義一下兩個函數
1 /// <summary> 2 /// 將控件的寬,高,左邊距,頂邊距和字體大小暫存到tag屬性中 3 /// </summary> 4 /// <param name="cons">遞歸控件中的控件</param> 5 private void setTag(Control cons) 6 { 7 foreach (Control con in cons.Controls) 8 { 9 con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; 10 if (con.Controls.Count > 0) 11 setTag(con); 12 } 13 } 14 //根據窗體大小調整控件大小 15 private void setControls(float newx, float newy, Control cons) 16 { 17 //遍歷窗體中的控件,重新設置控件的值 18 foreach (Control con in cons.Controls) 19 { 20 21 string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//獲取控件的Tag屬性值,並分割后存儲字符串數組 22 float a = System.Convert.ToSingle(mytag[0]) * newx;//根據窗體縮放比例確定控件的值,寬度 23 con.Width = (int)a;//寬度 24 a = System.Convert.ToSingle(mytag[1]) * newy;//高度 25 con.Height = (int)(a); 26 a = System.Convert.ToSingle(mytag[2]) * newx;//左邊距離 27 con.Left = (int)(a); 28 a = System.Convert.ToSingle(mytag[3]) * newy;//上邊緣距離 29 con.Top = (int)(a); 30 Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字體大小 31 con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); 32 if (con.Controls.Count > 0) 33 { 34 setControls(newx, newy, con); 35 } 36 } 37 }
三、給窗體添加事件
1 private void Form1_Load(object sender, EventArgs e) 2 { 3 X = this.Width;//獲取窗體的寬度 4 Y = this.Height;//獲取窗體的高度 5 setTag(this);//調用方法 6 }
這里需要注意一下,是否第一次運行程序
1 private void Form1_Resize(object sender, EventArgs e) 2 {
//如果是第一次運行,需要把下面的if語句取消注釋,否則會沒反應,其以后再運行或調試的時候,就把它注釋即可 3 //if (IsFirst) { IsFirst = false; return; } 4 float newx = (this.Width) / X; //窗體寬度縮放比例 5 float newy = (this.Height) / Y;//窗體高度縮放比例 6 setControls(newx, newy, this);//隨窗體改變控件大小 7 }
那么,一個簡單的窗體改變大小,其里面的控件會根據其窗體等比例改變,就不會出現格式亂套的情況了。