как можно отличить событие, когда пользователь явно нажал кнопку x (или нажал ALT F4), чтобы закрыть форму, и все другие методы программного закрытия формы (me.close() и т. д.). Я уже понял, что это можно сделать с помощью объектов-отправителей, но я действительно этого не понимаю. Может ли кто-нибудь объяснить это для меня на примере? Всем большое спасибо заранее.
vb.net: различайте me.close() и x-button
Ответы (2)
Аргументы события класса FormClosingEventArgs имеют перечисление, чтобы указать причину закрытия формы.
https://msdn.microsoft.com/en-us/library/system.windows.forms.closereason(v=vs.110).aspx
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.Closing
If Not appClosing AndAlso e.CloseReason = System.Windows.Forms.CloseReason.UserClosing Then
' DO WHATEVER CODE YOU WANT IN HERE
' LIKE SETTING E.CANCEL TO TRUE
End If
End Sub
' You can also set a close appClosing local variable at the class level as a boolean, whenever you call closing in code, assign the variable.
appClosing = True
Me.Close();
person
Ctznkane525
schedule
08.04.2018
Спасибо Ctznkane, он попробовал именно это, и проблема в том, что команда if выполняется, когда я также отправляю me.close() из кода. Кажется, есть настоящие Close.Resons, чтобы различать me.close() и кнопку x!?
- person Luke P; 09.04.2018
Это так просто. :)
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
e.Cancel = True
End Sub
Это предотвратит закрытие формы с помощью кнопки X
, а также :). Проблема в том, что если вы сделаете это, вы не сможете закрыть форму с помощью Me.Close
. Чтобы исправить это, просто удалите EventHandler
:)
RemoveHandler Me.Closing, AddressOf Form1_FormClosing
'Now close the form
Me.Close()
person
Christopher H.
schedule
08.04.2018
FormClosing
,sender
всегда будет самой формой, поскольку именно она отправила/инициировала событие. Аргументы события сообщают вам причину. - person Ňɏssa Pøngjǣrdenlarp   schedule 08.04.2018