Window close events in a winforms application

后端 未结 4 2108
生来不讨喜
生来不讨喜 2020-12-06 19:40

I am looking to prompt the user to save data when they close a form window in a winforms application. I can\'t figure out how to trigger the prompt to the user, should they

相关标签:
4条回答
  • 2020-12-06 19:53

    You need the FormClosing Event

    0 讨论(0)
  • 2020-12-06 19:57

    You need to handle the FormClosing event. This event is raised just before the form is about to be closed, whether because the user clicked the "X" button in the title bar or through any other means.

    Because the event is raised before the form is closed, it provides you with the opportunity to cancel the close event. You are passed an instance of the FormClosingEventArgs class in the e parameter. By setting the e.Cancel property to True, you can cancel a pending close event.

    For example:

    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
    
    0 讨论(0)
  • 2020-12-06 20:04

    If you override the form's OnFormClosing method, you have the chance to notify the user that changes have been made, and the opportunity to cancel closing the form.

    The event provides you with a FormClosingEventArgs instance which has a CloseReason property (which tells you why the form is closing) as well as a Cancel property, which you can set to True to stop the form from closing.

    0 讨论(0)
  • 2020-12-06 20:05

    I implent this code for C# hope so it useful to you

    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;
            }
    
    0 讨论(0)
提交回复
热议问题