开发者

How to stop the execution of DialogResult based on a condition?

开发者 https://www.devze.com 2023-01-11 03:45 出处:网络
I\'m having a issue with the following scenario on Windows Forms: I created a Form with two buttons, each button have been assigned with the behaviour DialogResult OK and DialogResult Cancel, respect

I'm having a issue with the following scenario on Windows Forms:

I created a Form with two buttons, each button have been assigned with the behaviour DialogResult OK and DialogResult Cancel, respectively. But based on certain conditions, I need to stop the execution of the OK button. The problem is that if I just made a return like this:

private void btnOk_Click(object sender, EventArgs e开发者_如何学JAVA)
    {
        foreach(Control control in tblTable.Controls)
        {
            if (control.GetType() == typeof(TextBox))
            {
                 if (control.Text.Trim() == "")
                 {
                     control.Focus(); return;
                 }
            }
            else
            {

            }
        }
    }

The dialog result keeps returning the OK answer to the parent form.

I need to stop the execution of the event and not return any answer until the user corrects the info on the form. In other words, the user should be taken back to the form to correct any missing or wrong data.


As Hans Passant mentions in an comment, just set the DialogResult to None!
Like this:

private void btnOk_Click(object sender, EventArgs e)
{
    if(ValidationFailed())
    {
        this.DialogResult = DialogResult.None;
        return;
    }
    //...
}


Personally I wouldn't use DialogResults on buttons in this scenario. I only tend to set the DialogResult when there's only distinct options that do not require any additional logic (i.e. making a custom MessageBox).

What I would do is to just send the DialogResult yourself on success:

private void btnOk_Click(object sender, EventArgs e)
{
    if (allIsOK())
    {
        this.DialogResult = DialogResult.OK;
    }
}


Consider tapping into the Forms's Closing event, and use the Cancel property of the event args to cancel form closing.

Here's a web page that discusses the idea; it's VB, but you'll get the idea:

http://www.vbinfozine.com/t_wfdlg.shtml

0

精彩评论

暂无评论...
验证码 换一张
取 消