模态形式的验证

本文关键字:验证 模态 | 更新日期: 2023-09-27 17:55:55

>我有一个简单的模态形式,我必须在其中检查用户输入的数据。但是在验证后,表单将关闭。它的行为是这样的,因为不是空的 DialogResult 属性,但我需要这个值用于其他目的(在父窗体中)有什么想法吗?

一些代码来澄清问题


//This method creates and calls a modal form. 
public static Definition edit(Definition w)
{
    EditForm ed = new EditForm();
    DialogResult dr = ed.ShowDialog();
    if (dr == DialogResult.OK)
    {
       //update some fields of passed object
    }
    //other code
}
private void btnSave_Click(object sender, EventArgs e)
{
       if (validateForm())
       {
           DialogResult = DialogResult.Yes;
           Close();
       }
}

模态形式的验证

我会这样做:

private void btnSave_Click(object sender, EventArgs e)
{
       if (validateForm())
       {
           DialogResult = DialogResult.Yes;
           Close();
       }
       else
       {
           DialogResult = DialogResult.None;
       }
}

即正如您所说,清除DialogResult.

添加一个FormClosing事件处理程序,如果验证失败,则设置e.Cancel = true

private void EditForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.DialogResult == DialogResult.OK)
    {
        e.Cancel = !ValidateInput();
    }
}

这将使您的子窗体保持打开状态,并让用户更正错误。您可以通过检查DialogResult并仅在OK时执行验证来检查是否已单击"确定"或"取消"/窗口关闭按钮。