【问题标题】:Closing messagebox from modal dialog closes the dialog从模式对话框关闭消息框关闭对话框
【发布时间】:2015-03-13 23:08:02
【问题描述】:

我有一个自定义模式对话框,我想在出错时调用消息框。 但是在关闭消息框时,对话框也会关闭。

有没有办法让对话框保持打开并关闭消息框?

【问题讨论】:

  • 贴一些你试过的代码..
  • 有人可以回答这个问题吗?我有一个类似的问题。您在某个窗口上调用 ShowDialog,然后在该窗口上显示 MessageBox,当 MessageBox 关闭时,ShowDialog 调用之后的代码继续(它不应该)。

标签: wpf xaml dialog modal-dialog messagebox


【解决方案1】:

这似乎与here 提到的问题相同。我找到了一种方法来修复它并通过它,可能证明它确实是一个错误。我的解决方案,如here所述:

解决方法是为表单的 FormClosing 事件添加一个处理程序,以便您可以在那里取消它。

通过检查FormClosingEventArgs.CloseReason 似乎可以检测到该错误。这通常是正常关闭时的“UserClosing”(甚至以编程方式调用this.Close()),但由于这个错误,它被设置为“None”,我认为这个值是某种通常不应该使用的默认值。

private void form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.None)
    {
        e.Cancel = true;
        return;
    }
    // any other OnClose code you may wish to execute.
}

[编辑]

抱歉,链接问题中的问题是 OP 使用 form.DialogResult 作为消息框结果的临时变量,导致主窗体关闭,实际上,不相关。伙计们,为这样的事情使用临时变量。

最可能的真正原因是设置了表单的AcceptButton,而实际接受按钮的代码进行了验证。即使验证引发错误,AcceptButton 也会导致表单的DialogResult 设置为OK,从而关闭表单。为防止这种情况发生,要么不要设置AcceptButton 属性,而只需手动设置DialogResult,或者在出错时,通过将DialogResult 设置为DialogResult.None 来明确清除DialogResult

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2013-11-11
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多