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

ux6nzvsh  于 2023-02-16  发布在  其他
关注(0)|答案(4)|浏览(146)

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

            }
        }
    }

对话框结果会不断向父窗体返回“确定”答案。
我需要停止事件的执行,并且在用户更正窗体上的信息之前不返回任何答案。换句话说,用户应该返回窗体以更正任何丢失或错误的数据。

kxe2p93d

kxe2p93d1#

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

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

6yt4nkrj2#

我个人不会在这种情况下在按钮上使用DialogResult,我只倾向于在只有不需要任何额外逻辑的不同选项时设置DialogResult(例如,创建一个自定义MessageBox)。
我所要做的就是在成功时自己发送DialogResult

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

ohfgkhjo3#

考虑利用Forms的Closing事件,并使用事件参数的Cancel属性取消窗体关闭。
这是一个讨论这个想法的网页它是VB的,但你会明白
http://www.vbinfozine.com/t_wfdlg.shtml

erhoui1w

erhoui1w4#

如果您已在子窗体(对话框)中的按钮上使用了DialogResult,并希望返回到没有对话框结果的窗体,请在form_closing()事件上使用函数:

private void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (notValidated)
    {
       e.Cancel = true;
    }
}

相关问题