文档章节

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

这二年
 这二年
发布于 2014/06/04 11:17
字数 657
阅读 650
收藏 0

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
作品 0
西安
私信 提问
C#从入门到精通之Windows窗体

1.Form窗体 1.1 设置启动窗口:Application.Run(new Form1()); 1.2 窗体的属性 1.更改窗体的图标:在属性面板中设置窗口的Icon属性(在添加窗体图标时图标格式只能是ico) 2.隐藏窗体的标题栏...

tiegenz
03/23
0
0
Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())

在Qt中设置widget背景颜色或者图片方法很多种:重写paintEvent() , 调色板QPalette , 样式表setStyleSheet等等。 但是各种方法都有其注意事项,如果不注意则很容易陷入麻烦中。 1:setStyleS...

晨曦之光
2012/04/13
720
0
怎样将CDockablePane里面的控件随着CDockablePane拉伸动态改变大小

C# Dev控件如何让Panel里面的窗体随着Panel大小改变 C# 小弟我用SplitContainer分割窗体,改变大小后,里面的控件的dock不会随之而变,请教为什么,多谢 C# flowlayoutpanel里面的没法随着窗...

开源BBS
2013/08/06
0
2
CVE-2018-1000136:Electron nodeIntegration绕过漏洞

1周前,研究人员发现一个影响Electron所有版本的漏洞,利用该漏洞可以开启nodeIntegration,这可能会造成远程代码执行。Electron是一个使用JavaScript,HTML和CSS等Web技术创建原生程序的框架...

技术小能手
05/18
0
0
C#中关闭子窗口而不释放子窗口对象的方法

1 在主窗口中实例化子窗口 在主窗口中实例化子窗口,而不是在按钮中实例化子窗口对象。 Form2 f2 = new Form2(); 2 通过按钮来显示主窗口 在按钮中需要实现的是窗口的显示 private void Con...

qian_tao
08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
22分钟前
0
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
8
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
4
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
昨天
5
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部