如何区分用户明确按下 x 按钮(或按下 ALT F4)以关闭表单的事件和以编程方式关闭表单的所有其他方法(me.close() 等)。 我已经发现,这可以使用发送者对象来完成,但我并没有真正明白。有人可以用一个例子为我解释一下吗? 提前非常感谢大家。
类 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();
就这么简单。 :)
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()
ControlBox 设置为 True 的表单(因此 X 按钮位于右上角)。 用于关闭表单的“关闭”按钮。
为了区分,你需要知道有一个名为 DialogResult 的 Button 属性,默认值为 DialogResult.None
Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click
DialogResult = DialogResult.OK
' Add other codes you wish here
End Sub ' End of CloseButton_Click
Private Sub MyFormClosing(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.FormClosing
If DialogResult = DialogResult.OK Then
' Triggered by Close button
Else
' Triggered by X button
End If
End Sub ' End of MyFormClosing