Оба метода имеют Handles Me.FormClosing
, поэтому оба метода выполняются, когда форма закрыта. Там нет конкретного ордера, в котором они казнены.
Когда несколько методов обрабатывают одно и то же событие, событие вызывает их в том порядке, в котором они запросили получение событий. Компилятор произвольно решил, что метод Form1_FormClosing
стоит первым. Попробуйте добавить этот код между двумя методами и посмотрите, не изменится ли он снова.
Private Sub Aaa(ByVal sender As Object, ByVal e As FormClosingEventArgs)
Handles Me.FormClosing
MsgBox("Aaa")
End Sub
Кстати, я удивлен, что ваш код компилируется, поскольку Form.Load
имеет подпись, отличную от Form.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
, чтобы было ясно, что обрабатывается несколько событий.