前段时间教学生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,答案是一定要有的,只是要有时间付出罢了。。。