gpt4 book ai didi

.net - 处理 Me.FormClosing 的两种方法;为什么他们按这个特定顺序开火?

转载 作者:行者123 更新时间:2023-12-01 02:36:36 25 4
gpt4 key购买 nike

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles Me.Load, Me.FormClosing
MessageBox.Show("form_load")
End Sub


Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) _
Handles Me.FormClosing
MessageBox.Show("form_closing")
End Sub

在关闭表单时,我观察到 Form1_FormClosing 方法首先被触发,然后是 Form1_Load 方法。

为什么选择这个顺序?为什么 Form1_Load 没有先被触发/进入,然后是 Form1_FormClosing

.NET 如何在处理同一事件的两个方法中选择先触发哪个方法?

最佳答案

这两个方法都有 Handles Me.FormClosing,所以这两个方法都在窗体关闭时执行。没有特定的顺序执行它们。

当多个方法处理同一个事件时,事件会按照它们要求接收事件的顺序调用它们。编译器任意决定 Form1_FormClosing 方法排在第一位。尝试在这两种方法之间添加这段代码,看看它是否再次发生变化。

Private Sub Aaa(ByVal sender As Object, ByVal e As FormClosingEventArgs)
Handles Me.FormClosing
MsgBox("Aaa")
End Sub

附带说明一下,我很惊讶您的代码编译为 Form.LoadForm.FormClosing 具有不同的签名。


如果您希望代码按特定顺序执行,只需处理一次事件并按顺序调用其他方法。

Private Sub Form1_Load(sender As Object, e As EventArgs)
Handles Me.Load
ReportLoad()
End Sub

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs)
Handles Me.FormClosing
ReportLoad()
MsgBox("Form1_FormClosing")
End Sub

Private Sub ReportLoad()
MsgBox("ReportLoad")
End Sub

在不同名称的方法中处理事件会产生误导和混淆。我从来没有猜到 Form1_Load 会被 FormClosing 事件调用。如果要处理多个事件,或者多个对象的同一个事件,在一个方法中,把方法名改成Form1_xxx或者xxxButton_Click,这样就可以清楚的知道多个事件正在处理中。

关于.net - 处理 Me.FormClosing 的两种方法;为什么他们按这个特定顺序开火?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7021699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com