文档章节

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

这二年
 这二年
发布于 2014/06/04 11:17
字数 657
阅读 593
收藏 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
692
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

没有更多内容

加载失败,请刷新页面

加载更多

Python介绍

Python介绍 一、简介 Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载等,有益于增强源代码的复用性。Python相对于Lisp这种传统的函数式编程语言,P...

星汉
13分钟前
0
0
VS_设置护眼背景色

工具---->选项---->环境---->字体和颜色:

一个小妞
16分钟前
0
0
Flask跨域请求的处理方法

在Flask开发RESTful后端时,前端请求会遇到跨域的问题。下面是解决方法: 使用 flask-cors库可以很容易的解决 pip install flask-cors 两种方法,一个是全局/批量的,一个是单一独立的: 安全...

ykbj
17分钟前
2
0
Pandas学习记录-Series

系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。 pandas.Series Pandas系列可以使用以下构造函数创建 - pandas.Series( dat...

kipeng300
24分钟前
0
0
可以实现内网穿透的几款工具

最近没什么事情,看了一些关于内网穿透的文章,因我本身已是做微信开发相关的工作,对这部分关注的比较多,现分享给大家。 首先说下内网穿透的原理。 NAPT原理 在NAT网关上会有一张映射表,表...

哥本哈根的小哥
25分钟前
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部