C#中使MDI程序只打开一次子窗体的方法

前段时间教学生MDI程序,实现只打开一个子窗体实例,不能多次打开同一子窗体时,发现判断子窗体是否为null不行。

       google了一下当时没找到。后来自己想了个用布尔变量的方法,判断子窗体是否已关闭,后来感觉如果子窗体很多要设置很多布尔变量,这样做太麻烦了。

       今天要开始做课程设计了,总不能教学生这种下三滥方法吧,又开始google了。

      最后终于在这个页面找到了答案:

http://hi.baidu.com/marioooooooooo/blog/item/07f3b42f9633095a4fc2265d.html

      唯一跟作者不同的是,我认为子窗体不必要时static静态的,静态成员的主要目的是类有多个实例时只有一个拷贝,并且可以直接通过类名调用,一直存在。这在MDI父窗口中是没有意义的。

     还有通过单步调试,我发现else分支里的activate从来就没执行过,所以只要下面的代码:      

       if (f==null || f.IsDisposed) {

                f = new Form2();
                f.MdiParent = this;
                f.Show();

                                                 }
    
    即判断子窗体是否为空(当第一次打开子窗体时)或者子窗体内存是否已被释放(即子窗体被关闭之后,这时判断是否为null是没有用的),如果成立才创建新窗体。

           看来自己水平还是有限啊,再次感谢google,感谢作者!同时看来只要耐心找,没有问题是找不到的。多思考,多google,答案是一定要有的,只是要有时间付出罢了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值