Windows Forms: Overriding the OnClosing method

Windows Forms: Overriding the OnClosing method

Although I spent many years as a UNIX developer using C++ and X-Windows, I am new to MS Windows. I am working on a C# Window Forms app and I want to know how to trap the Window close event (when the user presses the 'X' button in the upper right corner of the form). I use validation methods on my text boxes and have not been able to figure out how to stop the validation event when the user presses the 'X?' Thanks R.B.

    Requires Free Membership to View

    When you register, you'll begin receiving targeted emails from my team of award-winning writers. Our goal is to provide a unique online resource for developers, architects and development managers tasked with building and maintaining enterprise applications using Visual Basic, C# and the Microsoft .NET platform.

    Hannah Smalltree, Editorial Director

    By submitting your registration information to SearchWinDevelopment.com you agree to receive email communications from TechTarget and TechTarget partners. We encourage you to read our Privacy Policy which contains important disclosures about how we collect and use your registration and other information. If you reside outside of the United States, by submitting this registration information you consent to having your personal data transferred to and processed in the United States. Your use of SearchWinDevelopment.com is governed by our Terms of Use. You may contact us at webmaster@TechTarget.com.

The most straightforward way to do it is to override the behavior of the OnClosing method on the Form. Basically, this method passes an argument to the active control to see if it validates, and the Cancel flag on the argument is set accordingly. By overriding the value set on that flag, you can always allow the form to close:

protected override void OnClosing(CancelEventArgs e)
{
    // Let the default behavior to happen.
    base.OnClosing(e);
    // Do not allow cancellation of the close operation.
    e.Cancel = false;
}

This was first published in March 2005