vb.net:区分 me.close() 和 x-button

问题描述 投票:0回答:3

如何区分用户明确按下 x 按钮(或按下 ALT F4)以关闭表单的事件和以编程方式关闭表单的所有其他方法(me.close() 等)。 我已经发现,这可以使用发送者对象来完成,但我并没有真正明白。有人可以用一个例子为我解释一下吗? 提前非常感谢大家。

vb.net forms events sender formclosing
3个回答
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();

2
投票

就这么简单。 :)

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()

0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.