winforms应用程序中的窗口关闭事件

时间:2011-01-31 13:01:25

标签: .net vb.net winforms formclosing

我希望在winforms应用程序中关闭表单窗口时提示用户保存数据。如果单击表单右上角的红色框,我无法弄清楚如何触发用户提示。

我的应用程序当前有一个布尔标志,在textchanged事件上设置为True。因此,我只需要检查红色框触发的任何事件中的布尔值。

有什么建议吗?

4 个答案:

答案 0 :(得分:11)

您需要处理FormClosing event此事件是在表单即将关闭之前引发的,无论是因为用户单击标题栏中的“X”按钮还是通过任何其他方式。

由于在表单关闭之前引发了事件,因此它为您提供了取消关闭事件的机会。您将在e参数中传递FormClosingEventArgs类的实例。通过将e.Cancel property设置为True,您可以取消待处理的关闭事件。

例如:

Private Sub Form_Closing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
    If Not isDataSaved Then
        ' The user has unsaved data, so prompt to save
        Dim retVal As DialogResult
        retVal = MessageBox.Show("Save Changes?", YesNoCancel)
        If retVal = DialogResult.Yes Then
            ' They chose to save, so save the changes
            ' ...
        ElseIf retVal = DialogResult.Cancel Then
            ' They chose to cancel, so cancel the form closing
            e.Cancel = True
        End If
        ' (Otherwise, we just fall through and let the form continue closing)
    End If
End Sub

答案 1 :(得分:5)

如果您覆盖表单的OnFormClosing方法,则可以通知用户已进行更改,并有机会取消关闭表单。

该事件为您提供了一个FormClosingEventArgs实例,该实例具有CloseReason属性(告诉您表单关闭的原因)以及一个Cancel属性,您可以将其设置为True以停止从结束开始。

答案 2 :(得分:5)

我为C#希望实现这个代码,所以它对你有用

protected override void OnFormClosing(FormClosingEventArgs e)
            {            
                base.OnFormClosing(e);
                if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes)
                {
                    Dispose(true);
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                }
            }

        private DialogResult PreClosingConfirmation()
        {
            DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit?          ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            return res;
        }

答案 3 :(得分:0)

您需要FormClosing活动