C#WinForm窗体事件执行次序

转载 2013年12月04日 16:54:02

 

一、以下是网络上可搜索到的次序

   当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件:
        System.Windows.Forms.Control.HandleCreated
        System.Windows.Forms.Control.BindingContextChanged
        System.Windows.Forms.Form.Load
        System.Windows.Forms.Control.VisibleChanged
        System.Windows.Forms.Form.Activated
        System.Windows.Forms.Form.Shown

    当应用程序关闭时,会以下列顺序引发主要表单的关闭事件:         
        System.Windows.Forms.Form.Closing
        System.Windows.Forms.Form.FormClosing
        System.Windows.Forms.Form.Closed
        System.Windows.Forms.Form.FormClosed
        System.Windows.Forms.Form.Deactivate

 

二、以下是我测试的次序,全部protected override 这些事件,并且在其base.的前后分别处理一次,如下

 

  1. protected override void OnLoad(EventArgs e)  
  2. {  
  3.     textBox1.Text += "OnLoad1" + "/r/n";  
  4.     base.OnLoad(e);  
  5.     textBox1.Text += "OnLoad2" + "/r/n";  
  6. }  

 

OnClientSizeChanged1
OnClientSizeChanged2
OnClientSizeChanged1
OnClientSizeChanged2

// Loyout要多次执行
OnLayout1 
OnLayout2
OnHanleCreated1
OnHanleCreated2
OnInvalidated1
OnInvalidated2

// 注意这里的一点点变化
OnCreateControl1
OnLoad1
OnLoad2
OnCreateControl2

//
OnLayout1
OnLayout2
OnActivated1
OnActivated2
OnShown1
OnShown2
OnPain1
OnPain2

 

希望这个次序能给大家带来用处。。可以在不同事件中去处理所需要的代码

三、以下是代码源。C# 2008 Express

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. // using System.Linq;   
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9.   
  10. namespace WindowsFormsApplication1  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.         }  
  18.   
  19.         // 输出窗体事件的执行次序   
  20.   
  21.         protected override void OnActivated(EventArgs e)  
  22.         {  
  23.             textBox1.Text +=  "OnActivated1" + "/r/n";  
  24.             base.OnActivated(e);  
  25.             textBox1.Text += "OnActivated2" + "/r/n";  
  26.         }  
  27.   
  28.         protected override void OnClientSizeChanged(EventArgs e)  
  29.         {  
  30.             textBox1.Text += "OnClientSizeChanged1" + "/r/n";  
  31.             base.OnClientSizeChanged(e);  
  32.             textBox1.Text += "OnClientSizeChanged2" + "/r/n";  
  33.         }  
  34.   
  35.         protected override void OnCreateControl()  
  36.         {  
  37.             textBox1.Text += "OnCreateControl1" + "/r/n";  
  38.             base.OnCreateControl();  
  39.             textBox1.Text += "OnCreateControl2" + "/r/n";  
  40.         }  
  41.   
  42.         protected override void OnDeactivate(EventArgs e)  
  43.         {  
  44.             textBox1.Text += "OnDeactivate1" + "/r/n";  
  45.             base.OnDeactivate(e);  
  46.             textBox1.Text += "OnDeactivate2" + "/r/n";  
  47.         }  
  48.   
  49.         protected override void OnHandleCreated(EventArgs e)  
  50.         {  
  51.             textBox1.Text += "OnHanleCreated1" + "/r/n";  
  52.             base.OnHandleCreated(e);  
  53.             textBox1.Text += "OnHanleCreated2" + "/r/n";  
  54.         }  
  55.   
  56.         protected override void OnHandleDestroyed(EventArgs e)  
  57.         {  
  58.             textBox1.Text += "OnHanleDestoryed1" + "/r/n";  
  59.             base.OnHandleDestroyed(e);  
  60.             textBox1.Text += "OnHanleDestoryed2" + "/r/n";  
  61.         }  
  62.   
  63.         protected override void OnInvalidated(InvalidateEventArgs e)  
  64.         {  
  65.             textBox1.Text += "OnInvalidated1" + "/r/n";  
  66.             base.OnInvalidated(e);  
  67.             textBox1.Text += "OnInvalidated2" + "/r/n";  
  68.         }  
  69.   
  70.         protected override void OnLayout(LayoutEventArgs levent)  
  71.         {  
  72.             textBox1.Text += "OnLayout1" + "/r/n";  
  73.             base.OnLayout(levent);  
  74.             textBox1.Text += "OnLayout2" + "/r/n";  
  75.         }  
  76.   
  77.         protected override void OnLoad(EventArgs e)  
  78.         {  
  79.             textBox1.Text += "OnLoad1" + "/r/n";  
  80.             base.OnLoad(e);  
  81.             textBox1.Text += "OnLoad2" + "/r/n";  
  82.         }  
  83.   
  84.         protected override void OnPaint(PaintEventArgs e)  
  85.         {  
  86.             textBox1.Text += "OnPain1" + "/r/n";  
  87.             base.OnPaint(e);  
  88.             textBox1.Text += "OnPain2" + "/r/n";  
  89.         }  
  90.   
  91.         protected override void OnShown(EventArgs e)  
  92.         {  
  93.             textBox1.Text += "OnShown1" + "/r/n";  
  94.             base.OnShown(e);  
  95.             textBox1.Text += "OnShown2" + "/r/n";  
  96.         }  
  97.   
  98.          
  99.     }  
  100. }  

C#WinForm窗体事件执行次序(较完整版)

一、以下是网络上可搜索到的次序   当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件:        System.Windows.Forms.Control.Hand...
  • neok
  • neok
  • 2009年09月29日 11:06
  • 8610

[转]C#WinForm窗体事件执行次序

一、 当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事 件:          System.Windows.Forms.Control.HandleCreated...
  • klausyorkoswald
  • klausyorkoswald
  • 2013年08月26日 12:05
  • 296

C#WinForm窗体事件执行次序-启动、退出

是网络上可搜索到的次序当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件: System.Windows.Forms.Control.HandleCre...
  • gmailllm
  • gmailllm
  • 2015年07月21日 14:41
  • 165

[C#]控件的几个事件的执行顺序

对于需要重写文本控件等来统一调整外观显示、数据校验等处理时,事件执行顺序有时会很重要。比如对重写的文本控件类做修改,以达到控件得到焦点和失去焦点时颜色变化。如果同时重写了OnGotFocus和OnEn...
  • am2004
  • am2004
  • 2006年01月04日 20:29
  • 1989

C# WINFORM 捕获最小化事件

C# WINFORM 捕获最小化事件 虽然Form类没有提供Minimize的事件,但还是可以通过重载Deactive来实现 当Form失去焦点后,测试WindowState取得For...
  • wlanye
  • wlanye
  • 2016年03月07日 15:14
  • 1511

C#在Initializecomponent中添加load事件和formclosing事件

如果给定义这个方法的窗体添加,代码如下: private void InnitializeComponent() { this.Load += new System.EventHandle...
  • ahxujian
  • ahxujian
  • 2011年11月07日 22:49
  • 1189

C#中WinForm窗体事件的执行次序

C#中WinForm窗体事件的执行次序如下:    当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件:         System.Windows.Forms.C...
  • wangyineng
  • wangyineng
  • 2012年11月15日 18:05
  • 7967

WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码)

先申明下,此文适合和我差不多的菜鸟学习,没有什么高深知识点,不想耽误老鸟们的宝贵时间,如果有什么专业术语不对的还请指正啊。     最近进行WinCE的开发,第一次实际做C/S架构的项目,其中遇到很多...
  • qiujialongjjj
  • qiujialongjjj
  • 2012年11月27日 13:26
  • 38196

C#处理窗体的最小化事件及恢复正常窗体事件

最近因为我的一个小软件需要处理窗体最小化事件及窗体从最小化恢复到正常状态时的事件, 所以上网查了下,原来是通过处理窗体的Resize事件来实现的,我实现该工能时的主要代码如下: //窗体大小...
  • friendan
  • friendan
  • 2012年11月27日 13:02
  • 17160

使用C#制作 个性化窗体 winform 界面

引言:谁都希望自己的应用程序能让人留下一个深刻的印象,让自己的程序窗体有一件与众不同的"外衣"是一个好办法。试想:在一大堆的普通窗口中突然跳出一个很酷的界面,一定能让人眼睛一亮进而产生兴趣的。在VB,...
  • daonidedie
  • daonidedie
  • 2007年08月21日 15:05
  • 3452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#WinForm窗体事件执行次序
举报原因:
原因补充:

(最多只允许输入30个字)