Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 880
DkAngelito Avatar asked Apr 24 '09 01:04

DkAngelito


2 Answers

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.

like image 145
jrcs3 Avatar answered Sep 29 '22 20:09

jrcs3


A cleaner solution would be to set DialogResult to None:

private void acceptButton_Click(object sender, EventArgs e)
{
    if (!isValid()) {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
    }
}
like image 43
Anders Carstensen Avatar answered Sep 29 '22 19:09

Anders Carstensen