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

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放