Daa*_*nvl 2 .net c# forms winforms formclosing
搜索谷歌和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;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用,应用程序只是关闭.
随机形式的结束事件处理程序
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}
Run Code Online (Sandbox Code Playgroud)
编辑:@cody grey更改onclose和clean_form仍然没有效果,(不应该显示子窗体的Closing事件中的消息框吗?因为它没有)
你不应该在这个Dispose方法中这样做.相反,尝试处理FormClosing事件.
此事件在表单关闭之前发生,因此您可以检查所需的状态,并在必要时通过设置e.Cancel为True 取消关闭.
例如:
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
// Check to see if the user is allowed to close this form
if (!allowClose)
{
// Prevent this form from being closed
MessageBox.Show("This form cannot be closed yet!");
e.Cancel = true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |