在子DialogBu​​tton关闭后保持父DialogBu​​tton打开

时间:2012-04-09 16:19:29

标签: c# winforms visual-studio-2010 showdialog dialogresult

我在使用ShowDialog()后关闭父窗体直到关闭时遇到问题。

我一直在尝试这个,但无法得到。我认为我可能会遗漏一些简单的事情。你能帮我注意一下吗?

问题是, 我有表格1,按一个按钮,表格2打开。 我在表格2中做了一些验证,并检查验证。如果验证没有通过,我打开一个DialogBox表单,重试和取消。 如果我按重试,控件应返回到表格2,表格2不应该关闭。 如果按取消,DialogBox表单和表单2都应该关闭。现在,无论我按什么,表格都会关闭。

我看过网上找不到任何解决方案。通过这个解决方案,但两个表格仍然关闭我。 Why does closing a nested child dialog also close the parent dialog?

我的代码:(示例示例场景)

表格1:

private void button1_Click(object sender, EventArgs e)
{
    Form2 testForm = new Form2();
    DialogResult dialogResult = new DialogResult();
    dialogResult = testForm.ShowDialog(this);
    if(dialogResult == DialogResult.OK)
    {
        //Do something
    }
}

表格2:

private void button1_Click(object sender, EventArgs e)
{

    DialogResult validDataResult = MessageBox.Show("Invalid Data Entered. Please provide the correct data."
            , "Data Management"
            , MessageBoxButtons.RetryCancel);

    if (validDataResult == DialogResult.Cancel)
    {
        this.Close();
    }
}

2 个答案:

答案 0 :(得分:1)

在Form2.cs中

进行验证然后再进行 (假设validationOK是您支票的真/假结果)

if(validationOK == false)
{
    // Ask retry or cancel to the user
    if(DialogResult.Cancel == MessageBox.Show("Validation Fail", "Validation failed, press retry to do it againg", MessageBoxButtons.RetryCancel))
        this.DialogResult.Cancel; // Set the dialog result on form2. This will close the form.

    // if you have the validation done in a button_click event and that button has its
    // property DialogResult set to something different than DialogResult.None, we need
    // to block the form2 from closing itself.

    // uncomment this code if the above comment is true
    // else
    //    this.DialogResult = DialogResult.None;
}

答案 1 :(得分:0)

您必须先设置DialogResult Form2才能拨打this.Close()。否则,它仍然是默认值。 (下面的代码只是猜测实际的双重关闭逻辑,因为你没有指定)

Form2.cs:

if (validDataResult == DialogResult.Cancel)
    DialogResult = DialogResult.Cancel;
else
    DialogResult = DialogResult.OK;
Close();

Form1.cs中:

if(dialogResult == DialogResult.OK)
{
    Close();
}
else
{
    //Do something
}