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.的前后分别处理一次,如下
1
2
3
4
5
6
|
protected override void OnLoad(EventArgs e) { textBox1.Text += "OnLoad1" + "\r\n" ; base .OnLoad(e); textBox1.Text += "OnLoad2" + "\r\n" ; } |
OnClientSizeChanged1
OnClientSizeChanged2
OnClientSizeChanged1
OnClientSizeChanged2
// Loyout要多次执行
OnLayout1
OnLayout2
OnHanleCreated1
OnHanleCreated2
OnInvalidated1
OnInvalidated2
// 注意这里的一点点变化
OnCreateControl1
OnLoad1
OnLoad2
OnCreateControl2
//
OnLayout1
OnLayout2
OnActivated1
OnActivated2
OnShown1
OnShown2
OnPain1
OnPain2
希望这个次序能给大家带来用处。。可以在不同事件中去处理所需要的代码
三、以下是代码源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /* * 输出窗体事件的执行次序 */ protected override void OnActivated(EventArgs e) { textBox1.Text += "OnActivated1" + "\r\n" ; base .OnActivated(e); textBox1.Text += "OnActivated2" + "\r\n" ; } protected override void OnClientSizeChanged(EventArgs e) { textBox1.Text += "OnClientSizeChanged1" + "\r\n" ; base .OnClientSizeChanged(e); textBox1.Text += "OnClientSizeChanged2" + "\r\n" ; } protected override void OnCreateControl() { textBox1.Text += "OnCreateControl1" + "\r\n" ; base .OnCreateControl(); textBox1.Text += "OnCreateControl2" + "\r\n" ; } protected override void OnDeactivate(EventArgs e) { textBox1.Text += "OnDeactivate1" + "\r\n" ; base .OnDeactivate(e); textBox1.Text += "OnDeactivate2" + "\r\n" ; } protected override void OnHandleCreated(EventArgs e) { textBox1.Text += "OnHanleCreated1" + "\r\n" ; base .OnHandleCreated(e); textBox1.Text += "OnHanleCreated2" + "\r\n" ; } protected override void OnHandleDestroyed(EventArgs e) { textBox1.Text += "OnHanleDestoryed1" + "\r\n" ; base .OnHandleDestroyed(e); textBox1.Text += "OnHanleDestoryed2" + "\r\n" ; } protected override void OnInvalidated(InvalidateEventArgs e) { textBox1.Text += "OnInvalidated1" + "\r\n" ; base .OnInvalidated(e); textBox1.Text += "OnInvalidated2" + "\r\n" ; } protected override void OnLayout(LayoutEventArgs levent) { textBox1.Text += "OnLayout1" + "\r\n" ; base .OnLayout(levent); textBox1.Text += "OnLayout2" + "\r\n" ; } protected override void OnLoad(EventArgs e) { textBox1.Text += "OnLoad1" + "\r\n" ; base .OnLoad(e); textBox1.Text += "OnLoad2" + "\r\n" ; } protected override void OnPaint(PaintEventArgs e) { textBox1.Text += "OnPain1" + "\r\n" ; base .OnPaint(e); textBox1.Text += "OnPain2" + "\r\n" ; } protected override void OnShown(EventArgs e) { textBox1.Text += "OnShown1" + "\r\n" ; base .OnShown(e); textBox1.Text += "OnShown2" + "\r\n" ; } } } |