根据条件 - Winforms停止执行dialogResult

lid*_*min 6 validation winforms

我在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
            {

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

对话框结果一直向父表单返回OK答案,我需要停止执行该事件,并且在用户更正表单上的信息之前不要返回任何答案.

谢谢你的帮助.

Ulf*_*edt 8

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

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

  • @CRice:不,不会.在下一次单击时,由于按钮的DialogResult属性设置为OK,表单的DialogResult将再次被按钮设置为OK.(也许你以为我的意思是将DialogProperty设置为按钮为无?) (3认同)

djd*_*d87 5

我个人DialogResult在这种情况下不会使用s on按钮。我只倾向于在DialogResult只有独特的选项不需要任何其他逻辑(即制作自定义MessageBox)时设置。

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

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

  • 我不。Windows UI设计要求在用户按下Enter键时关闭对话框,并标记默认按钮(OK)。解决方法很简单,只需将DialogResult设置为None。 (4认同)