1.引子
今天工作时候,两个窗口内容差不多,就想着继承了就行。
然后就是坑的开始。
2.过程
父窗口PForm,子窗口CForm继承自父窗口PForm。PForm中有一个Shown方法,这个方法是一个在窗口加载完毕的事件。在通常,这方法不会出现任何问题,也是常用的一个方法。
在PForm中的Shown中,调用了其他一些方法,有些会抛出异常。然而,双击PForm,打开他的设计器时,一切正常;在双击CForm,打开子窗口的设计器时,异常抛出!开始以为异常有问题,删掉异常。嗯。双击CForm,看起来一切正常。仔细一看,有些不自然。原来,是将一些运行期间的代码执行了,并讲结果显示进设计器中!再再刚才删掉异常的地方,加上MessageBox。打开父类设计器,一切正常。打开子类设计器,MessageBox弹出! 反复又测了几回,发现只有设计器是关闭的时候,打开CForm的设计器,才会调用PForm的Shown方法。
3.结论
如果在C#中进行窗口继承,那么,在子类设计器关闭的情况下,打开子类设计器,会以正常运行程序的方式将父窗口显示出来。也就是说,父窗口如果有什么乱七八糟的事件统统都是会执行的。
4.验证
(1)首先新建个windowsform项目。
新建父窗口,加上Shown事件。看看父窗口代码和界面: