在搜索 google 和 stackoverflow 之后,我找不到对我的情况有帮助的答案。我有一个带有开始菜单(表单)的应用程序。当用户按下(任何)表单的 X(关闭)时,我重新加载开始菜单。现在,当该(菜单)表单关闭时,如果用户按下取消,我想检查并通知用户任何现在隐藏的表单是否处于编辑模式(有或没有未保存的更改)我想显示该表单并阻止应用程序关闭。现在我的问题是如何阻止应用程序停止在其他表单的代码中。我重写了调用 this.close 的子窗体的 dispose 方法,因此显示了 ok/cancel 消息框,但在 MB 之后,开始菜单无论如何都会关闭,从而停止程序。
编辑:好的,这里的部分代码按被调用的顺序排列。我哪里错了?
private void Menu_FormClosing(object sender, FormClosingEventArgs e)
{
Global.Forms.Remove(this);
if (!Global.Clean_Forms())
{
e.Cancel = true;
Global.Forms.Add(this);
}
}
public static void Clean_Forms()
{
foreach (Form f in Forms)
{
if (f is Menu)
{
//do nothing
}
else
{
if (!f.IsDisposed)
{
f.Close();
}
}
}
if (Forms.Count != 0)
{
isClean = false;
/* String a = "";
foreach (Form f in Forms)
{
a += f.ToString() + ": ";
}
MessageBox.Show(a);*/
}
else
{
isClean = true;
}
}
然而这不起作用,应用程序只是关闭。
随机形式的关闭事件处理程序
private void persoon_form_FormClosing(object sender, FormClosingEventArgs e)
{
if (editing)
{
DialogResult dr;
dr = MessageBox.Show("uw wijzigingen gaan verloren. Doorgaan?", "sluiten", MessageBoxButtons.OKCancel);
if (dr == DialogResult.Cancel)
{
e.Cancel = true;
}
else if (dr == DialogResult.OK)
{
Global.size = this.Size;
Global.position = this.Location;
Global.Forms.Remove(this);
Form f = Global.menu();
f.Show();
this.Dispose();
}
}//somethingelse}
编辑:@cody gray 更改 onclose 和 clean_form 仍然没有效果,(不应该显示子窗体的 Closing 事件中的消息框吗?因为它没有)