我知道这是一个非常简单的问题,但我正在寻找干净整洁的建议。我的应用程序是一个MDI应用程序。创建了一个在整个应用程序中使用的基本表单。有几种形式我们不希望用户关闭,以避免人为错误,我们计划不允许用户关闭这些形式。
我曾尝试在表单结束事件中设置e.cancel = true
,但似乎它不起作用可以有人给我一些建议吗?
编辑:
Private void FrmTask_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
问题在于,当我使用此代码时,我的MDI应用程序中的表单都没有关闭,甚至是主MDI父表单。
答案 0 :(得分:2)
您也可能无法显示关闭按钮:
<德尔> http://blogs.msdn.com/b/atosah/archive/2007/05/18/disable-close-x-button-in-winforms-using-c.aspx 德尔>
Cody Gray在评论中提供了更好的链接,也禁止Alt-F4关闭:
答案 1 :(得分:2)
据推测,这里的问题是您希望窗口在应用程序存在时关闭,但如果用户尝试手动关闭窗口则不要关闭。
要做到这一点,你必须有一个手动覆盖,比如一个名为allowShutdown
的变量,并且有一个方法可以在MdiParent关闭时设置它。
private void Form_Closing(object sender, EventArgs e)
{
if( !allowShutdown) e.Cancel = true;
}
public void ForceShutdown()
{
allowShutdown = true;
Close();
}
然后以您的父母形式:
private void Form_Closing(object sender, EventArgs e)
{
if( childForm != null ) childForm.ForceShutdown();
}
这假设您在创建父表单时保留对子表单的引用。将此功能与隐藏其他帖子中提到的关闭按钮相结合,您应该有一个可行的解决方案。
答案 2 :(得分:0)
我怀疑FormClosingEventArgs.CloseReason会给你足够的信息来确定是否有条件地取消关闭。