对话框窗口中的对话框 - 父对话框以子对话框关闭

时间:2014-04-19 14:24:45

标签: c# winforms dialog showdialog

在我的主要表单中,我使用ShowDialog()打开一个新表单(让我们称之为父表单)。在父窗体中,我有一个加载OpenFileDialog的按钮,当我加载图像并单击打开按钮时,OpenFileDialog关闭但它也关闭了父窗口,我不希望这种情况发生。

主要表单代码:

    // ADD GRAPHICS BUTTON
    private void bAddGraphics_Click(object sender, EventArgs e)
    {
        NewGraphics newGraphics = new NewGraphics();
        newGraphics.ShowDialog();

        if (newGraphics.DialogResult == DialogResult.OK)
        { 
            Core.Graphics tempGraphicsObject = new Core.Graphics();
            tempGraphicsObject.name = newGraphics.name;
            tempGraphicsObject.background = newGraphics.bgImage;
            core.NewGraphics(tempGraphicsObject);
            generateSingleGraphicsControl(core.project.graphics[core.project.graphics.Count-1].id, core.project.graphics[core.project.graphics.Count-1].name);
        }
        newGraphics.Dispose();
    }

父表单(对话框)

        OpenFileDialog openFileDialog = new OpenFileDialog();
        DialogResult result = openFileDialog.ShowDialog();

        if (result == DialogResult.OK)
        {
            tbBackground.Text = openFileDialog.FileName;
            bgImage = Image.FromFile(tbBackground.Text);
        }
        openFileDialog.Dispose();

是因为我使用DialogResult两次还是因为我在对话窗口中调用了ShowDialog()?如果我不能在父级上使用ShowDialog()而只是Show()它可以正常工作但我不能使用DialogResult属性。有没有办法解决它,或者你只是不能两次使用ShowDialog()?

2 个答案:

答案 0 :(得分:1)

如果"父母"表单也正在关闭,然后您要么调用Close(),要么在表单上设置DialogResult属性(也会关闭它)。

来自MSDN,关于DialogResult属性:

  

如果表单显示为对话框,则使用DialogResult枚举中的值设置此属性将设置表单对话框结果的值,隐藏模式对话框,并将控制权返回给调用表单。 / p>

我没有看到你在你发布的代码中做过其中任何一个,但在你父母的#34;中检查一条像这样的行。形式:

DialogResult = DialogResult.OK;

this.DialogResult = DialogResult.Cancel;

Close();

this.Close();

答案 1 :(得分:0)

我知道我正在挖掘一个旧帖子,但我刚刚遇到了这个问题,并发现了另一种可能导致这种情况的情况。复制/粘贴表单控件并将它们重用于其他目的是很常见的。确保如果您为“浏览文件”按钮复制了表单的“确定”或“取消”按钮,您将删除 DialogResult 值。我已经这样做了,但忘了从我的文件夹浏览器按钮中删除 DialogResult.OK。显然,DialogResult 赋值将在单击事件之后发生,使对话框看起来关闭了其父级。