您的位置:首页 > 编程语言 > C#

从c#如何取消窗体关闭-看国内的一些书是如何误人子弟的

2012-03-18 17:41 423 查看
这次上的一门课,拿明日科技一般人出的一本c#案例书上的一个库存管理系统做例子。看到里面一段代码实在写得垃圾,佩服这些人是怎么敢出来写本书来教别人的,
所以尽信书不如无书,尤其是在国内这种出版环境下。。。。。
在看源代码时,发现是采用如下方法,让用户是否确认关闭窗口的:

private void frmMain_FormClosed(object sender, FormClosedEventArgs e)

{

if (MessageBox.Show("您真的要退出本系统吗?", "提示",

MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)

{

Application.Exit();

}

else

{

frmMain fmain = new frmMain();

fmain.Show();

}

}

这段代码虽然能实现关闭窗口取消功能,当一个明显的问题是由于重复生成了主窗口,屏幕会闪动一下。
很显然,学过windows编程的都知道,一般是有窗体的关闭事件参数cancel,可以取消窗体关闭的。
我google了一下,果然,下面代码可以取消:

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)

{

if (MessageBox.Show("您真的要退出本系统吗?", "提示",

MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)

{

Application.Exit();

}

else

e.Cancel = true;

}

在窗体关闭之前事件可以取消关闭。但这段代码在选择确定时,重复弹出了消息框,我想原因应该是应用的退出代码再次触发了closing事件。
因此,加入窗体成员:
Boolean closecancel=false;

然后下列代码应该算完善的:
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)

{

if (!closecancel)

{

if (MessageBox.Show("您真的要退出本系统吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)

{

closecancel = true;

Application.Exit();

}

else

e.Cancel = true;

}

}

当然本人平日读书也不多,编程水平也不高,如果代码有不足之处,欢迎拍砖。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: