個人版機房中開始沒有考慮子父窗體的設定問題,這樣出現什麼問題,如果將主窗體關閉,而你的開啟窗體仍不會關掉,這是肯定不允許的,網上查了一下,還挺容易。
private sub menuinquirepresentcash_click(sender as object, e as eventargs) handles menuinquirepresentcash.click
dim fipc as new frminquirepresentcash '例項化frminquirepresentcash窗體
fipc.mdiparent = me '將例項化窗體的父窗體設定為當前main窗體
fipc.show()
end sub
但是這樣的結果是子窗體被父窗體控制項覆蓋,怎麼辦?
記得第一次機房中用到
frame
容器性質的控制項,在
.net
中找到panel
控制項,將主窗體中的控制項都放在
panel
中,我的做法是每次子窗體開啟時將
panel
隱藏,退出時再顯示。
private sub menuinquirepresentcash_click(sender as object, e as eventargs) handles menuinquirepresentcash.click
dim fipc as new frminquirepresentcash '例項化frminquirepresentcash窗體
fipc.mdiparent = me '將例項化窗體的父窗體設定為當前main窗體
fipc.show()
panel1.visible = false '子窗體開啟時 panel1不可見
end sub
這樣問題又來了,如果開啟乙個子窗體,然後再開啟乙個,這時選擇關閉其中乙個的話,這是
panel
控制項將為可見,也就是說另外乙個窗體還是被隱藏。
一直都是這麼做的,但總覺得這麼做太沒有思想了,偶然看到一清部落格也有關於這個問題方案,在
u層新建了乙個se***ichild類,有兩種解決方法,一是將
子窗體顯示在mdi主窗體panel控制項之上,二是將子窗體上的控制項內嵌到mdi主窗體panel控制項之上
,然後再主窗體直接呼叫這個類的方法。
'/*********************
'類名稱:se***ichild
'功能:
'命名空間:charge.ui
'小組:
'版本號:v2.0.0
'**********************/
public class se***ichild
'子窗體顯示在mdi主窗體panel控制項之上
public sub se***ichildfront(frm as form, panel1 as panel)
frm.toplevel = false '設定它的頂級為false
frm.formborderstyle = windows.forms.formborderstyle.sizable '設定子窗體的邊框風格
frm.parent = panel1 '設定子窗體的父容器控制項是panel控制項
frm.show() '子窗體顯示
frm.bringtofront() '設定子窗體在最前面
end sub
'子窗體上的控制項內嵌到mdi主窗體panel控制項之上
public sub se***ichild(frm as form, panel1 as panel)
frm.formborderstyle = formborderstyle.none '改變frmmain的邊框風格,為無邊框風格
frm.toplevel = false '不將子窗體設定為頂級窗體
panel1.controls.add(frm) '設定panel控制項中控制項集合應該包括frm子窗體
frm.show()
end sub
end class
很好解決了子窗體的最小化和顯示問題,美中不足的是一清的方案沒有用到單例模式,他在
u層類的時候沒有將子窗體例項化,所以也是顯示乙個窗體,所以單例模式還是要用的。因為單例模式在每個子窗體中宣告變數和方法,我也沒有把得到每個子窗體的例項方法抽象出來,現在想著如何在
u層類中呼叫例項化子窗體的方法,研究中。。。
遇到問題首先自己思考找方法,然後可以通過和別人交流拓寬自己的思路,身邊的小夥伴都是我們的巨人!
Winfrom的Panel控制項新增子控制項排序問題
用 迴圈給panel中新增多個控制項例項,並且設定dock屬性後,子控制項的排序是後新增的在最上面,這是因為winfrom機制是最新新增的控制項會排在最前面,而不是最後面。但是需求是先新增的要放在最上面,為了實現這個需求 可以把需要的控制項反向新增來解決這個問題,但是不是最好的解決方案。最好的解決方...
機房收費系統中dtpicker控制項的使用
在做機房收費系統的時候會有查詢記錄的,還會有好幾個窗體用到了組合查詢,在這些查詢中有的需要填寫日期和時間,當你選擇完欄位名後如果只是乙個text,那就需要乙個個的去輸入,不僅浪費時間而且沒有成就感,更談不上效率下面我們就來認識認識乙個控制項 dtpicker。首先,我們需要知道什麼是dtpicker...
VB版機房收費 MSFlexGrid控制項
一 在機房中遇到的問題 問題一 用msflexgrid控制項的時候,設定click事件以達到查詢的目的,並且將查詢內容顯示在控制項中,需要刪除上一次查詢的內容,有兩種方法。第一種方法是,在第二次顯示內容的時候先判斷控制項的第二行是否有內容,有的話則刪除,用迴圈語句來判斷,直到第二行 除了第一行的表頭...