C# 很多時(shí)候需要用到panel 面板來處理同一窗體,切換界面的問題
1.tabControl
- 優(yōu)勢: 即便在VS的設(shè)計(jì)面板內(nèi)也可以很好處理
- 缺點(diǎn):
- 1.控件名容易重復(fù)或太長,比如將登陸、注冊、重置密碼做在同一個(gè)tabControl的3個(gè)page中時(shí),都要填用戶名密碼,所以即便控件基本一摸一樣,你也要每個(gè)Page創(chuàng)建一次,并且在命名上要給予區(qū)分,txtLoginUsername,txtRegisterUsername ...
當(dāng)然如果你的應(yīng)用場景每個(gè)Page的控件都基本不同,這條缺點(diǎn)也可以忽略 - 2.整個(gè)tabControl綁定的方法都會(huì)在這個(gè)Form窗體中,代碼量增加。
- 3.惡心的標(biāo)簽頭和邊框,標(biāo)簽頭最小可以設(shè)置寬高為1, 即便你設(shè)置border = none 也能看到個(gè)外邊框。
解決方法有這三種:- a.找東西擋住
- b.重寫控件
- c.先用一個(gè)panel容器,再將tabControl放在這個(gè)panel里面,然后設(shè)置這個(gè)tabControl的位置和大小,讓他大于整個(gè)panel,直到標(biāo)簽頭和邊框看不見。因?yàn)檫@個(gè)tabControl是這個(gè)panel內(nèi)的控件,所以超出部分他是不會(huì)顯示的。
- 1.控件名容易重復(fù)或太長,比如將登陸、注冊、重置密碼做在同一個(gè)tabControl的3個(gè)page中時(shí),都要填用戶名密碼,所以即便控件基本一摸一樣,你也要每個(gè)Page創(chuàng)建一次,并且在命名上要給予區(qū)分,txtLoginUsername,txtRegisterUsername ...
2.panel
如果直接多個(gè)panel疊上去,平時(shí)修改維護(hù)的時(shí)候要怎么做呢?
摳腳做法:拉大界面,然后每個(gè)panel拉開再改
正確的做法應(yīng)該是:打開視圖-其他窗口-文本大綱,然后將3個(gè)panel放在同一層,想顯示的那個(gè)拖至第一個(gè)即可
但是同樣會(huì)有tabControl缺點(diǎn)1的問題。
3.自定義panel控件
最好的方法是,創(chuàng)建一個(gè)自定義Panel控件,因?yàn)樗姆椒ùa也可以分離在那個(gè)控件中,不用全寫在Form窗體中了
注意:
- 1.如果你的winform是選擇的框架是大于.net 4.6 并且支持高DPI的,那么自定義控件的AutoScaleMode選擇DPI,font要和你放置的Form窗體一致,不然可能導(dǎo)致這個(gè)自定義Panel創(chuàng)建在你的Form窗體上時(shí)不一樣。
- 2.維護(hù)修改時(shí),建議打開 視圖-其他窗口-文檔大綱,然后將3個(gè)panel放在同一層,想顯示的那個(gè)拖至第一個(gè),方便維護(hù)
- 3.維護(hù)修改的時(shí)候,在自定義控件中改了后,要重新生成一下解決方案,才會(huì)在Form窗體的設(shè)計(jì)面板中顯示出來。
- 4.多個(gè)Panel中將想顯示的面板放到最前面,通過panel控件的BringToFront()方法。還有個(gè)將控件放最后的方法 SendToBack() ,但這個(gè)用的比較少
- 5.如果想在panel中調(diào)用父窗體的方法,((FrmFather)this.ParentForm).FatherMethodYouNeed();