在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
新闻热点
疑难解答