文档章节

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

这二年
 这二年
发布于 2014/06/04 11:17
字数 657
阅读 530
收藏 0
点赞 0
评论 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
CVE-2018-1000136:Electron nodeIntegration 绕过漏洞

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

嘶吼RoarTalk
05/18
0
0
CreateProcess函数

调用CreateProcess函数来创建一个进程: 一个线程调用CreateProcess时,系统将创建一个进程内核对象,其初始使用计数为1.进程内核对象不是进程本身,而是操作系统用来管理这个进程的一个小型...

牛肉圆粉不加葱
2014/08/20
0
0
利用CWinThread实现跨线程父子MFC窗口

原则上,MFC对象只能由创建该对象的线程访问,而不能由其它线程访问.这是因为MFC窗口中有一个Windows handle maps, 这个maps同线程相关,也就是说该线程一定会访问该maps,而且该线程创建的MFC窗...

jetyi
06/26
0
0
同源策略和跨域问题

原文来自:http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html 浏览器安全的基石是"同源政策"(same-origin policy)。很多开发者都知道这一点,但了解得不全面。 本文详细介绍...

bug_killer
2017/12/14
0
0
浏览器同源政策及其规避方法

浏览器安全的基石是"同源政策"(same-origin policy)。很多开发者都知道这一点,但了解得不全面。 本文详细介绍"同源政策"的各个方面,以及如何规避它。 一、概述 1.1 含义 1995年,同源政策...

oschina
2016/04/10
3.5K
7
浏览器同源政策及其规避方法

浏览器安全的基石是"同源政策"(same-origin policy)。很多开发者都知道这一点,但了解得不全面。 本文详细介绍"同源政策"的各个方面,以及如何规避它。 一、概述 1.1 含义 1995年,同源政策...

阮一峰
2016/04/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Scala Configuration 相关API

Play使用了 Typesafe config library,但是也提供了一个有着更多Scala高级特性的的 Configuration 封装。不熟悉Typesafe配置的开发者可以移步 configuration文件的语法和特性文档。 读取配置...

Landas
今天
1
0
使用cookie技术 记住账号

1. 效果 2. 实现过程 2.1 前端 将用户的选中传递给后台 这个参数的获取是 参考:https://my.oschina.net/springMVCAndspring/blog/1860498 // var rememberLogin = $("#rememberLoginId").i...

Lucky_Me
今天
1
0
《趣谈网络协议》02之网络分层的真实含义

一、提出问题 1.提出问题 当你听到什么二层设备、三层设备、四层 LB 和七层 LB 中层的时候,是否有点一头雾水,不知道这些所谓的层,对应的各种协议具体要做什么“工作”? 2.这四个问题你弄...

aibinxiao
今天
2
0
Python3学习日志二 Python中的集合set和字典dict

1.集合set 定义一个集合set 我们可以看到定义集合set有两种不同的形式,如果要定义一个空的集合set不能用{}而是要用set();另外,集合是无序的,而且set中的元素是不可重复的,如果你定义了一...

Mr_bullshit
今天
0
0
adb 操作指令详解

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。...

孟飞阳
今天
0
0
nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)

一、安装环境 1、本机系统:Windows 10 Pro(64位) 2、Node.js:v6.9.2LTS(64位) 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进...

sprouting
今天
1
0
Redisson

了解了Redisson,发现使用挺简单的,接下来准备深入学习一下。 Redisson介绍 Redisson是架设于Redis基础之上的一个Java驻内存数据网格(In-Memory Data Grid) Redisson在基于NIO的Netty框架上...

to_ln
今天
0
0
python有哪些好玩的应用实现,用python爬虫做一个二维码生成器

python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询、cmd版的实时翻译、快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给...

python玩家
今天
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
今天
0
0
Python数据分析numpy基础-维度的认识

什么是多维数组? 核心对象是同型的多维数组(简单理解就是一个表格,通常内容都是些数字),具有相同的数据类型。 概念: 1. axes(轴):数组的维度统称为轴。 2. rank:轴的数量称为rank。...

十年磨一剑3344
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部