在vb6中,多個窗體之間可以很方便地互相調用,如:在form1中,只需要用一條“form2.show” 語句就能顯示窗體form2。然而在vb.net中窗體處理機制發生了很大的變化:在訪問窗體之前,你必須進行窗體實例化;如果在項目中有多處代碼訪問同一窗體,則你必須把它的同一實例指針傳遞給這些代碼,否則新創建的窗體實例就不再是原先的窗體了。
下面的代碼實現窗體form1和form2之間互相調用,form1為主窗體。form1上的按鈕btnshowfrm2的標題為“顯示form2”,form2上的按鈕btnshowfrm1的標題為“顯示form1”。
1、form1中的代碼:
public class form1
inherits system.<a href="http://dev.21tx.com/os/windows/" target="_blank">windows</a>.forms.form
'創建form2的一個新的實例
dim frm2 as new form2()
public function instance2(byval frm as form2)
frm2 = frm
end function
private sub btnshowfrm2_click(byval sender as system.object, byval e as system.eventargs) _
handles btnshowfrm2.click
'以下語句保證在form2以及其他窗體中訪問form1時,
'都將得到form1的同一個窗體實例。
frm2.instance(me)
frm2.show()
me.hide()
end sub
end class
2、form2中的代碼:
public class form2
inherits system.windows.forms.form
dim frm1 as form1
'借助一個新增的instance屬性來生成窗體frm1的實例
public function instance(byval frm as form1)
frm1 = frm
end function
private sub btnshowfrm1_click(byval sender as system.object, byval e as system.eventargs) _
handles btnshowfrm1.click
me.hide()
frm1.show()
end sub
private sub form2_closed(byval sender as object, byval e as system.eventargs) handles mybase.closed
'如果form2被關閉,則設置form1的按鈕btnshowfrm2不可用。
frm1.btnshowfrm2.enabled = false
frm1.show()
end sub
end class
新聞熱點
疑難解答