Search code examples
c#.netacceptbutton

C# Validate before leaving accept_button event


Excuse me if this is a silly question but i'm a beginer here.

I have a simply custom dialog with two buttons: Accept and Cancel. The Accept button is the acceptButton of the form.

I want to do some validations on the Accept_Click event and decide if i can close the dialog or not, but everytime it leaves this method, the dialog automatically closes itself and returns Ok.

What can I do to stop the dialog from closing itself? or i have to do things in some other way?

thanks


Solution

  • I would have a form level variable (call it _vetoClosing) In the accept button's Click event, I would run validation and set the variable based on that:

        private void acceptButton_Click(object sender, EventArgs e)
        {
            // Am I valid
            _vetoClosing = !isValid();
        }
    

    Then in the FormClosing event, I would cancel close if _vetoClosing is true

        private void Form_FormClosing(object sender, FormClosingEventArgs e)
        {
            // Am I allowed to close
            if (_vetoClosing)
            {
                _vetoClosing = false;
                e.Cancel = true;
            }
        }
    

    Turning Accept button off is suboptimal because you loose the Enter to Press functionality.