从一段最简单的程序看vb.net

今日看了韩睿先生的vb之旅,开头的一个小例子非常有意思 目标:创建两个窗体,每个窗体上各有一个按钮,点击时隐藏其所在的那个窗体,切换出另一个窗体。 实现过程: VB6中只需要两句写在按钮的单击响应中的语句就行了: 两个窗体:Form1与Form2。Form1上的按钮为: Command1,Form2上的按钮为: command2 Private Sub Command1_Click() Me.Hide Form2.Show End Sub Private Sub Command2_Click() Me.Hide Form1.Show End Sub vb.net第一次实现如下: module1.vb,并且同时在: 解决方案管理器-〉项目名.sln -〉右点鼠标 -〉属性 -〉通用属性->常规->启动对象 -〉改为Module1。让程序启动后先运行Module1中的代码指令,然后编写代码如下: 创建一个模块文件:Module1.vb Module Module1 Public frm1 As New Form1() ‘定义Form1的公用变量实例 Public frm2 As New Form2() ‘定义Form1的公用变量实例 Sub Main() Application.Run(frm1) ‘这句话表明程序启动了modele后,会接下来运行frm1,即form1的一个实例。主线程就成为运行期的frm1了。 End Sub End Module 这样一来,frm1、frm2就成为全局变量了,在Button1与Button2的单击响应代码中只要写:frm1.show就可以了。但是:如果在frm1隐藏起来的时候,关闭了Form2窗口(frm2实例),桌面上什么窗体都没有了,进程又一次被陷入在无法中止的情况下。 解决办法:只要能截获Form2实例关闭的消息,不就可以再调出隐藏的主线程窗体了吗?在Form2的基类事件(Base Class Event)中重载Closing方法进行处理: Private Sub Form2_Closing(ByVal sender As Object, ByVal e As _ System.ComponentModel.CancelEventArgs) Handles MyBase.Closing frm1.Show() End Sub 哈,很方便,我关闭了Form2窗体的实例后,被隐藏的那个frm1又出现了。 再点击一下Form1窗体上的Button1试试。 果然,弹出一个出错窗口 “你关闭了frm2这个Form2的实例,也就结束了这个对象的生存期,”大李看来是蓄势已久了,“这就是出错提示中所说的‘无法访问名为Form2的已处置对象’。当我们关闭一个窗口的时候,会发出一个终止响应,并将该窗口对象,就象上面定义的frm2,送入终止队列,公共语言运行库的垃圾回收器跟踪着这个对象的生存期,此时就会调用此对象基类,比如Form2的Dispose方法,用于销毁对象并收回资源。所以……” “所以我只要判断一下frm2是否被销毁就行了,如果销毁了,我就再构造一个实例不就行了?”我恍然大悟道。 大李第一次微笑地点了点头说:“用frm2.IsDisposed就可以来判断了。” 我心领神会地写道: Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click If frm2 Is Nothing Or frm2.IsDisposed Then ‘判断对象是否被销毁 frm2 = New Form2() End If Me.Hide() frm2.Show() End Sub 一段小小的例子涉及倒的问题还真多!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值