事件引发的顺序对某些Windows 窗体应用来说十分重要。当某些事件需要特别处理时(如重绘窗体的某些部分),必须知道事件在运行时的确切引发顺序。下面就应用程序和控件的生命周期中的几个重要阶段的事件顺序进行详细讨论。

应用程序的启动和关闭

Form和Control类有一组和程序启动和关闭先关的事件。当Windows Forms程序启动时,主窗体的启动事件按以下顺序引发:

  • Control.HandleCreated
    为控件创建句柄时发生,在首次显示Control时会创建句柄。例如,如果创建的Control但其Visible属性设置为false,则HandleCreated不会引发,直到Visiable 设置为true才引发。
  • Control.BindingContextChanged
    BindingContext属性值改变时引发.
  • Form.Load
    Form首次显示时引发,可以通过该事件分配窗体使用的资源等任务。
  • Control.VisibleChanged
    Visible属性改变时引发。
  • Form.Activated
    当窗体激活时引发,当应用程序处于活动状态并且有多个Form,则活动的窗体时具有输入焦点的窗体。不可见的窗体不能成为活动窗体。激活form最简单的方法时单击它。
    在运行时激活Form,使用Activate方法。可以使用此事件处理一些任务,如根据form在未激活时对窗体数据所做的更改来更新窗体内容。
  • Form.Shown
    form首次显示时引发,而在随后的最小化、最大化、还原、隐藏或无效化和重新绘制都不会引发该事件

当Windows Forms程序关闭时,主窗体的关闭事件按以下顺序引发:

  • Form.Closing
  • Form.FormClosing
  • Form.Cloed
  • Form.FormClosed
  • Form.Deactivate

Application类的ApplicationExit事件在主窗体关闭事件之后引发。

聚焦和验证事件

当通过使用键盘(TAB,Shift+Tab等)、调用Select或SelectNextControl方法、或将ActiveControl属性设置为当前窗体等方法更改焦点时,Control类的聚焦事件按以下顺序发生:

  • Enter
  • GotFocus
  • Leave
  • Validating
  • Validated
  • LostFocus

当使用鼠标或通过调用Focus方法更改焦点时,Control类的聚焦事件发生顺序为:

  • Enter
  • GotFocus
  • Leave
  • Validting
  • Validated

C# Windows Forms 事件处理顺序的更多相关文章

  1. Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架

    最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...

  2. Windows Forms (一)

    导读 1.什么是 Windows Forms 2.需要学Windows Forms 么? 3.如何手写一个简单的Windows Forms 程序 4.对上面程序的说明 5.Form 类与Control ...

  3. System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....

    #region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...

  4. System.Windows.Forms.ListView : Control

    #region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...

  5. Windows Forms编程实战学习:第三章 菜单

    第三章 菜单 1,控件和容器 所有的Windows Forms控件都是从System.Windows.Forms.Control类继承的,相关类的层次结构如下图所示: MarshalByRefObje ...

  6. Windows Forms 对话框篇

    1,标准对话框 Windows内置的对话框,又叫公用对话框,它们作为组件提供的,并且存在于System.Windows.Forms命名空间中. 手工方式: private void button1_C ...

  7. windows forms 上一个类似于wpf snoop 的工具: Hawkeye

    windows forms 上一个类似于wpf snoop 的工具: Hawkeye 周银辉 WPF上有snoop这样的run time object editor让人用着很爽, 今天搜到了一个for ...

  8. WPF中实例化Com组件,调用组件的方法时报System.Windows.Forms.AxHost+InvalidActiveXStateException的异常

    WPF中实例化Com组件,调用组件的方法时报System.Windows.Forms.AxHost+InvalidActiveXStateException的异常 在wpf中封装Com组件时,调用组件 ...

  9. DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解

    关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

随机推荐

  1. 理解javascript中的原型模式

    一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点:  1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂 ...

  2. 【JDBC】向数据表插入数据时,自动获取生成的主键

    数据表设计时,一般都会有一个主键(Key)(自己指定),有时也可以使用联合主键: 有许多数据库提供了隐藏列为表中的每行记录分配一个唯一键值(如:rowid): 当我们没有指定哪一列作为主键key时,数 ...

  3. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】

    基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...

  4. sublime安装DocBlockr注释插件

    点击sublime的菜单栏 view->show console :现在打开了控制台, 这个控制台有上下两栏, 上面一栏会实时显示sublime执行了什么插件,输出执行结果, 如果你安装的某个插 ...

  5. 腾讯首度公开S级手游品质管理方法

    weimjsam   引言 在最新的手游市场占有率统计中,腾讯游戏稳稳占据一半江山,目前仍以每月一到两款的速度推出新品,在如此复杂多变.响应要求极高的市场环境下,能持续推出高质量产品并保持高效迭代更新 ...

  6. 55. Jump Game

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. VS 使用Sql Server 数据库增删改查

    /// <summary> /// 执行查询语句,返回DataSet /// </summary> /// <param name="SQLString&quo ...

  8. (C/C++ interview) Static 详解

    C Static http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program Static could ...

  9. (C#) 多线程修改布尔值, volatile

    参考: https://msdn.microsoft.com/en-us/library/x13ttww7(VS.80).aspx http://stackoverflow.com/questions ...

  10. MST_prim

    刚刚发了mst 的kruskal,现在再来一发,说一说prim咯. prim适用于稠密图. 与kruskal不同,prim是从一个点开始,不断加入新的点直至连通所有点. 讲讲prim的过程,我们假定有 ...