相信很多博友在開發(fā)初次接觸學(xué)習(xí)C# winForm時(shí),當(dāng)窗體大小變化時(shí),窗體內(nèi)的控件并沒有隨著窗體的變化而變化,最近因?yàn)橐粋€(gè)項(xiàng)目工程的原因,也需要解決這個(gè)問題。通過查閱和學(xué)習(xí),這個(gè)問題得到了解決,或許不是很好的處理方式,但是也值得借鑒。。。
下面我將建立一個(gè)Demo來(lái)大概解釋下這個(gè)方法的實(shí)現(xiàn):(注:我使用的是的VS2010)
Step1:打開VS2010,建立一個(gè)C#Winform項(xiàng)目(注:這里我將其命名為test1,博友們可以自由發(fā)揮哈?。?/p>
建立之后拖拽控件達(dá)到如圖所示效果:

Step2:右擊,查看代碼,在代碼界面添加
1.定義全局變量
PRivate float X;//當(dāng)前窗體的寬度private float Y;//當(dāng)前窗體的高度
2.功能函數(shù)setTag
/// <summary> /// 將控件的寬,高,左邊距,頂邊距和字體大小暫存到tag屬性中 /// </summary> /// <param name="cons">遞歸控件中的控件</param> 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); } }
3.功能函數(shù)setControls
//根據(jù)窗體大小調(diào)整控件大小 private void setControls(float newx, float newy, Control cons) { //遍歷窗體中的控件,重新設(shè)置控件的值 foreach (Control con in cons.Controls) { string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//獲取控件的Tag屬性值,并分割后存儲(chǔ)字符串?dāng)?shù)組 float a = System.Convert.ToSingle(mytag[0]) * newx;//根據(jù)窗體縮放比例確定控件的值,寬度 con.Width = (int)a;//寬度 a = System.Convert.ToSingle(mytag[1]) * newy;//高度 con.Height = (int)(a); a = System.Convert.ToSingle(mytag[2]) * newx;//左邊距離 con.Left = (int)(a); a = System.Convert.ToSingle(mytag[3]) * newy;//上邊緣距離 con.Top = (int)(a); Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字體大小 con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); if (con.Controls.Count > 0) { setControls(newx, newy, con); } } }
4.在窗體的Load事件中添加
private void Form1_Load(object sender, EventArgs e) { X = this.Width;//獲取窗體的寬度 Y = this.Height;//獲取窗體的高度 setTag(this);//調(diào)用方法 }
5.在窗體的Resize事件中添加
private void Form1_Resize(object sender, EventArgs e) { float newx = (this.Width) / X; //窗體寬度縮放比例 float newy = (this.Height) / Y;//窗體高度縮放比例 setControls(newx, newy, this);//隨窗體改變控件大小 }
Step3: 點(diǎn)擊啟動(dòng)調(diào)試,至此該功能已經(jīng)實(shí)現(xiàn),是不是發(fā)現(xiàn)控件都可以等比例變化了?。╫ver)
總結(jié):當(dāng)然這只是一個(gè)小Demo,在實(shí)際應(yīng)用中,還需要各位博友的腦洞打開,才能更好的和各位的代碼契合,更好的應(yīng)用到實(shí)際的項(xiàng)目中去。這也是我的第一篇博文,雖然篇幅不長(zhǎng),但是內(nèi)容還算充實(shí)吧!希望以后各位多多支持~
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注