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.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
随机推荐
- kubectl 的插件管理工具krew
k8s的命令行工具kubectl 对于玩k8s 的人来说是必备工具.kubectl插件机制在Kubernetes 1.14宣布稳定,进入GA状态.kubectl的插件机制就是希望允许开发者以独立的二进 ...
- 深入剖析 Spring WebFlux
一.WebFlux 简介 WebFlux 是 Spring Framework5.0 中引入的一种新的反应式Web框架.通过Reactor项目实现Reactive Streams规范,完全异步和非阻塞 ...
- Electron+Vue+ElementUI开发环境搭建
Node环境搭建 本文假定你完成了nodejs的环境基础搭建: 镜像配置(暂时只配置node包镜像源,部分包的二进制镜像源后续讨论).全局以及缓存路径配置,全局路径加入到了环境变量 $ node -v ...
- 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
问题描述 把Web Role服务发布到Azure Cloud Service后,需要在IIS的输出日志中,把每一个请求的HTTP Request Header中的User-Agent内容也输出到日志中 ...
- 遇到括号就是栈(bushi)
CF508E Arthur and Brackets 我在赛场上想都没想直接DP \(O(n^3)\)过了 但别人说正解是栈+贪心 讲讲DP \(bool\) \(dp[i][j]\)表示从第i对括号 ...
- 洛谷3809 SA模板 后缀数组学习笔记(复习)
其实SA这个东西很久之前就听过qwq 但是基本已经忘的差不多了 嘤嘤嘤 QWQ感觉自己不是很理解啊 所以写不出来那种博客 QWQ只能安利一些别人的博客了 小老板 真的是讲的非常好 不要在意名字 orz ...
- 利用 CSS Overview 面板重构优化你的网站
本文将向大家介绍 Chrome 87 开始支持的 CSS Overview Panel,并且介绍如何更好地利用这个面板.通过 CSS Overview Panel,可能可以帮助我们: 更准确(高保真) ...
- Spring启动过程源码分析基本概念
Spring启动过程源码分析基本概念 本文是通过AnnotationConfigApplicationContext读取配置类来一步一步去了解Spring的启动过程. 在看源码之前,我们要知道某些类的 ...
- vue 解决axios请求出现前端跨域问题
vue 解决axios请求出现前端跨域问题 最近在写纯前端的vue项目的时候,碰到了axios请求本机的资源的时候,出现了访问报404的问题.这就让我很难受.查询了资料原来是跨域的问题. 在正常开发中 ...
- Stream中的Collector收集器原理
前言 Stream的基本操作因为平时工作中用得非常多(也能看到一些同事把Stream操作写得很丑陋),所以基本用法就不写文章记录了. 之所以能把Stream的操作写得很丑陋,完全是因为Stream底层 ...