我有一个自定义的模态对话框,我想在出错时调用一个Messagebox。但是在关闭消息框时,对话框也会关闭。
有什么方法可以让对话框保持打开,并直接关闭消息框?
这似乎和前面提到的那个问题一样。此处. 我找到了修复的方法,通过它,大概证明这确实是一个bug。我的解决方案,如前所述 此处:
一个变通的方法是为表单的FormClosing事件添加一个处理程序,这样你就可以在那里取消它。
这个错误似乎可以通过检查 FormClosingEventArgs.CloseReason
. 这通常是 "UserClosing",在正常关闭时(甚至在程序上通过调用 this.Close()
),但在这个错误中,它被设置为 "无",我认为这个值是某种默认值,通常不应该被使用。
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
.