您的位置:首页 > 移动开发 > Objective-C

FormClosing事件添加对话框重复执行的问题

2011-11-07 23:13 316 查看
 
在VS2005里面使用VS2003下的Form.Closing事件,因为VS2005里面不直接提供原Closing事件。所以找了一下,已经改为FormClosing了。

现在问题出来了。在VS2003里面的:

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> private void MainForm_Closing(object sender, FormClosingEventArgs e)

{

if (MessageBox.Show("你确定要退出本系统吗?",

"退出", MessageBoxButtons.OKCancel,

MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2) == DialogResult.OK)

{

LogoutSystem.Logout();

Application.Exit();

}

else

{

WriteLogger.WriteLog("退出系统", "退出系统被用户取消", "取消");

e.Cancel = true;

}

}

是正常的。但2005里面它会执行两次弹出对话框的操作。用F11键进行跟踪后,发现原来是Application.Exit();事件在作怪。

在执行到它的时候,它会再次执行MainForm_Closing整个事件。所以弹出两次对话框。

一个简单的方法。把Application.Exit();改为Application.ExitThread();就可以了。

另外,你也可以通过判断FormClosingEventArgs e参数的关闭原因来做相应的操作,

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> private void MainForm_FormClosing(object sender, FormClosingEventArgs e)

{

if (e.CloseReason == CloseReason.UserClosing )

{

if (MessageBoxEx.Show("您确定退出吗?","退出对话框",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

......

}

else

{

e.Cancel = true;

}

}

}
注意:你手动点窗口的“X”关闭按钮或者程序里面使用this.Close(),那么 FormClosingEventArgs 的关闭原因就是 CloseReason.UserClosing
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  object