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

相关文章

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

C#中SortedSet的具体使用

《C#中SortedSet的具体使用》SortedSet是.NETFramework4.0引入的一个泛型集合类,它实现了一个自动排序的集合,内部使用红黑树数据结构来维护元素的有序性,下面就来介绍一下如... 目录基础概念主要特性创建和初始化基本创建方式自定义比较器基本操作添加和删除元素查询操作范围查询集合运

C# Opacity 不透明度的具体使用

《C#Opacity不透明度的具体使用》本文主要介绍了C#Opacity不透明度的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录WinFormsOpacity以下是一些使用Opacity属性的示例:设置窗体的透明度:设置按钮的透