C#中OnLoad事件和Form1_Load事件的区别
在学习《GDI+高级编程》第二章的过程中遇到一个疑问,就是为何有的代码用的是覆写一个OnLoad事件,而平日里我用的一般是Form1_Load事件,这两个函数很相近,但是具体有什么关系呢?类似的代码如下:
OnLoad事件: protected override void OnLoad(EventArgs e) {
base.OnLoad(e); }
Form1_Load事件:private void Form1_Load(object sender, EventArgs e) {
}
后来查了相关的资料,参考网址:http://blog.sina.com.cn/s/blog_963217380100zw8p.html
发现原因是这样的:
基类中的OnLoad函数会引发事件调用Form1_Load。如果重写了OnLoad函数但是不调用base.OnLoad(e);而是定义自己在程序加载时的操作的话那么基类中引发事件的代码就不会被执行,也就是说Form1_Load将不会被执行。
这样看来,也就是可以理解成OnLoad事件包含了Form1_Load事件,或者说先有OnLoad事件后才会触动Form1_Load事件。如果在override了OnLoad事件中提前于Form_Load写一些预处理就会先与窗口加载代码。下面让我们更加深入一点理解事件的具体调用情况,来看看VS中程序启动的事件顺序:
1 - Form1 Constructor
2 - OnLoad
3 - Form1_Load
4 - OnActivated
5 - Form1_Activated
从上面的顺序我们可以知道程序启动按照“构造函数 - Load - Activated”的顺序进行。
这样看来是不是所有的Onxxx事件都会发生在xxx事件之前呢?我又找了一些资料,发现似乎确实是这样的,C#的编程规范中,发生xxx事件的时候通常会在Onxxx里写实现代码,并且可以重写Onxxx来自定义控件。基本上是Onxxx事件先触发事件后再把参数传递给xxx进行调用酱紫的。
那么知道了程序启动的事件是怎样的顺序后,再接着看看点击关闭窗口后的退出顺序,
1 - Form1 Constructor
2 - OnLoad
3 - Form1_Load
4 - OnActivated
5 - Form1_Activated
6 - OnDeactivate
7 - Form1_Deactivate
可以得到点击关闭程序后首先进行的事件为"Deactivate",但是却没有进入OnClosing和OnClosed中,由此我们也就明白了为什么在最初点击'X'号后程序并不退出的原因了。那么,该怎么处理呢,很简单,由于在点'X'号后程序进入Deactivate,因此,我们在OnDeactivate或Form1_Deactivate中调用this.close()就能进入到OnClosing和OnClosed中了,然后在OnClosing和OnClosed中做一些退出处理,就是这样!
最后我们看看在OnClosing事件显示的提示窗口中点击'ok'后程序的退出顺序:
1 - Form1 Constructor
2 - OnLoad
3 - Form1_Load
4 - OnActivated
5 - Form1_Activated
6 - OnClosing
7 - Form1_Closing
8 - OnClosed
9 - Form1_Closed
10 - OnDeactivate
11 - Form1_Deactivate
果然是多了OnClosing和OnClosed处理。
C#中OnLoad事件和Form1_Load事件的区别的更多相关文章
- JavaScript 中 onload 事件绑定多个方法的优化建议
页面加载完毕时会触发 onload 事件.基于内容(HTML)要与行为(JavaScript)分离的编码思想,我们需要将一些对页面的初始化操作写在方法内,并通过window.onload = func ...
- js中的事件委托或是事件代理详解
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
- javascript中的事件冒泡、事件捕获和事件执行顺序
谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有 ...
- JS中的事件类型和事件属性的基础知识
周末无聊, 这几天又复习了下JS搞基程序设计3, 想着好记性不如浪笔头哇, 要么把这些东西写下来, 这样基础才能更加扎实么么哒, 知道的同学也可以直接过一下,当做复习, 小姨子再也不用担心我的学习啦 ...
- DOM - 5.事件冒泡 + 6.事件中的this
5.事件冒泡 如果元素A嵌套在元素B中,那么A被点击不仅A的onclick事件会被触发,B的onclick也会被触发.触发的顺序是"由内而外" .验证:在页面上添加一个table. ...
- 在 SharePoint Server 2013 中配置建议和使用率事件类型
http://technet.microsoft.com/zh-cn/library/jj715889.aspx 适用于: SharePoint Server 2013 利用使用事件,您可以跟踪用户与 ...
- js中容易被忽视的事件问题总结
一:跨平台事件 什么叫跨平台事件?即在不同的浏览器上执行同一事件,所使用的方法不同. 什么是EventUtil对象?有什么作用?即将所有与事件相关的函数,融合在一起的一个容器,方便管理事件对象,它没有 ...
- JS中事件绑定函数,事件捕获,事件冒泡
1 事件绑定:事件与函数绑定以及怎么取消绑定 1.1 元素.onclick这种形式,如下: <div id="div1">aaa</div> <scr ...
- [转] js中的事件委托或是事件代理详解
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
随机推荐
- P7444-「EZEC-7」猜排列【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P7444 题目大意 一个长度为\(n\)的排列,已知每个\(c_i\)表示那个排列中\(mex\)为\(i\)的区间 ...
- Go语言之函数
函数就是一块执行特定任务的代码,在输入源的基础上通过一些算法生成预期的输出. 一.函数的声明 Go 语言中的函数声明语法如下: func 函数名(参数名 类型,参数名 类型)(返回值1类型,返回值2类 ...
- Min_25筛 学习小记
前言 为什么叫学习小记呢?因为暂时除了模板题就没有做其他的东西了.(雾 这个东西折磨了我一整天,看得我身不如死,只好结合代码理解题解,差点死在机房.(话说半天综合半天竞赛真是害人不浅) 为了以后忘了再 ...
- 题解 [BJOI2017]开车
题目传送门 题目大意 有\(n\)个汽车和\(n\)个加油站,坐标分别为\(a_{1,2,...,n}\)和\(b_{1,2,...,n}\).每辆汽车会到一个加油站,求出最小移动距离之和.有\(m\ ...
- 定制input元素
定制input元素 input元素可以用来生成一个供用户输入数据的简单文本框.其缺点在于用户在其中输入什么值都可以.有时这还不错,但是有时设计者可能希望让用户输入特定类型的数据.在后一种情况下,可以对 ...
- 路由器的不同接口对WANsim的影响
随着网络的快速发展,移动设备已经成为我们日常生活中不可或缺的一部分.人们习惯用手机看新闻.看视频.点外卖.打车.购物等等. 同时,广域网也为移动通讯带来了挑战.以视频流来举例,从用户终端到达服务器,这 ...
- 自定义Push/Pop和Present/Dismiss转场
项目概述 iOS中最常见的动画无疑是Push和Pop的转场动画了,其次是Present和Dismiss的转场动画. 如果我们想自定义这些转场动画,苹果其实提供了相关的API,在自定义转场之前,我们需要 ...
- noj加1乘2平方
广度优先搜索典例 00 题目 描述: 最简单的队列的使用#include <iostream>#include <queue>using namespace std;queue ...
- 【UE4 C++ 基础知识】<12> 多线程——FRunnable
概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的 ...
- 利用 pip 安装 Python 程序包到个人用户文件夹下
利用 --user 参数,即 pip install --user package_name 这样会将Python 程序包安装到 $HOME/.local 路径下,其中包含三个字文件夹:bin,lib ...