C#窗口继承的坑,子窗口会运行父窗口的代码。
C#窗口继承的坑,子窗口会运行父窗口的代码。
这二年 发表于4年前
C#窗口继承的坑,子窗口会运行父窗口的代码。
  • 发表于 4年前
  • 阅读 397
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

摘要: 在继承父窗口的时候,出现十分奇怪的行为。。。

1.引子

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

    然后就是坑的开始。

2.过程

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

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

3.结论  

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

4.验证

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

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


(2)2.看子窗口的界面,是跟父窗口一样的。不能改动,不过这不是重点。子窗口代码就不用看了,啥都没有。

(3)生成项目。(不生成窗口是继承不了的。)这个时候打开父窗口或者子窗口的设计器都是正常的。

  在父窗口的Shown里加上一句弹出框如下:



(4).重新生成下,关闭所有窗口。双击ParentForm.cs,一切正常。

    双击ParentForm.cs。好感人的一幕,父窗口的Shown运行了。我之前的猜测是对的。原理可能不太对,行为就是这样没错了。

    看图:

总结:c#里头继承窗口多少还是有些奇怪的问题。网上搜也没多少这类问题。想正常用的话还是复制粘贴或者多用接口什么的。未来的GUI是CSS的。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 2
码字总数 1155
×
这二年
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: