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窗体中实现传值备忘

用一个例子来说明吧,这样比较好明白一些。就是打开主窗体,datagridview加载了一些数据,然后我们在打开的子窗体中,输入一些条件,让主窗体中的数据随着加载的条件来动态实现加载数据。这就需要涉及到...

c# winform 窗体间委托事件传值

  • 2015年07月24日 11:00
  • 81KB
  • 下载

蛋疼的让C#控制台程序(Console)像窗体(Winform)一样(关闭,托盘图标,事件响应,手动退出等)

前言: 你可以把这篇文章定义为一篇蛋疼的文章,应为这个东西不怎么实用,还费神,没事折腾这做什么。恩,的确,蛋疼。我也同意,就算蛋疼也有它的小众范围,当你不想做webservers,winform等,...

C# winform窗体间传值(使用委托或事件)

C# winform窗体间传值(使用委托或事件) 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有...

C# WinForm窗体中有控件时keyDown事件问题处理方式

问题一描述:当新建一个窗体时,添加KeyDown事件后,会正常处理,但是当添加有控件时,比如Button,TextBox,不会触发窗体的KeyDown事件,也没有调用KeyDown事件的处理程序。 ...

C# winform 无边框窗体鼠标点击移动事件

原文地址:http://blog.csdn.net/qq_15126969/article/details/40024769 这里所谓的无边框窗体是指去除系统自带的标题栏和最大最小化...

【C#基础】之WinForm窗体常用控件的属性、方法及事件简介

今天结合自己以前搜集的一些资料简单总结下Winform窗体常用的控件使用及其属性、方法、事件等…… 一、按钮(Button)控件  几乎存在于所有Windows对话框中,是Windows应用程序中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#WinForm窗体事件执行次序
举报原因:
原因补充:

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