C#窗口继承的坑,子窗口会运行父窗口的代码。

在C#中,如果一个窗口(CForm)继承自另一个窗口(PForm),在子窗口的设计器关闭状态下,再次打开子窗口设计器时,会执行父窗口的Shown事件。这可能导致父窗口中的方法被意外调用,特别是在包含异常处理或运行时代码时。这种行为只在打开子窗口设计器时发生,且不影响实际运行。为避免此类问题,建议使用复制粘贴或接口等方式实现代码重用。
摘要由CSDN通过智能技术生成

1.引子

    今天工作时候,两个窗口内容差不多,就想着继承了就行。

    然后就是坑的开始。

2.过程

   父窗口PForm,子窗口CForm继承自父窗口PForm。PForm中有一个Shown方法,这个方法是一个在窗口加载完毕的事件。在通常,这方法不会出现任何问题,也是常用的一个方法。

    在PForm中的Shown中,调用了其他一些方法,有些会抛出异常。然而,双击PForm,打开他的设计器时,一切正常;在双击CForm,打开子窗口的设计器时,异常抛出!开始以为异常有问题,删掉异常。嗯。双击CForm,看起来一切正常。仔细一看,有些不自然。原来,是将一些运行期间的代码执行了,并讲结果显示进设计器中!再再刚才删掉异常的地方,加上MessageBox。打开父类设计器,一切正常。打开子类设计器,MessageBox弹出! 反复又测了几回,发现只有设计器是关闭的时候,打开CForm的设计器,才会调用PForm的Shown方法。

3.结论  

    如果在C#中进行窗口继承,那么,在子类设计器关闭的情况下,打开子类设计器,会以正常运行程序的方式将父窗口显示出来。也就是说,父窗口如果有什么乱七八糟的事件统统都是会执行的。

4.验证

(1)首先新建个windowsform项目。

新建父窗口,加上Shown事件。看看父窗口代码和界面:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值