C#WinForm窗体事件执行次序

2024-04-23 05:32

本文主要是介绍C#WinForm窗体事件执行次序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

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

   当 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.的前后分别处理一次,如下

 

[c-sharp] view plain copy print ?
  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

[c-sharp] view plain copy print ?
  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窗体事件执行次序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927906

相关文章

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代