如何根据条件停止执行DialogResult?

时间:2010-08-10 16:24:57

标签: winforms validation

我在Windows窗体上遇到以下方案的问题:

我创建了一个带有两个按钮的窗体,每个按钮分别分配了行为DialogResult OK和DialogResult Cancel。 但基于某些条件,我需要停止执行OK按钮。问题是,如果我这样做了一次回报:

private void btnOk_Click(object sender, EventArgs e)
    {
        foreach(Control control in tblTable.Controls)
        {
            if (control.GetType() == typeof(TextBox))
            {
                 if (control.Text.Trim() == "")
                 {
                     control.Focus(); return;
                 }
            }
            else
            {

            }
        }
    }

对话框结果会一直向父表单返回OK答案。

我需要停止执行事件,并且在用户更正表单上的信息之前不会返回任何答案。换句话说,应该将用户带回表单以更正任何丢失或错误的数据。

3 个答案:

答案 0 :(得分:7)

正如Hans Passant在评论中提到的那样,只需将DialogResult设置为None!
像这样:

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

答案 1 :(得分:4)

我个人不会在这个场景中使用DialogResult个按钮。当只有不需要任何其他逻辑的不同选项(即制作自定义MessageBox)时,我只倾向于设置DialogResult

我要做的就是自己发送DialogResult成功:

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

答案 2 :(得分:1)

考虑使用表单的Closing事件,并使用事件args的Cancel属性来取消表单关闭。

这是一个讨论这个想法的网页;这是VB,但你会明白这个想法:

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