我有一个MainForm。我可以通过使用关闭按钮(右上角)或单击menuitem miExit来关闭它。
我的问题是当我点击miExit并回答“OK”时,它会显示messageBox TWICE 。我该如何解决? (我理解为什么它会显示两次,但我怎么能避免呢?)
formclosing和miExit点击都必须为消息框提供“退出?”提示。
partial class MainForm : Form
{
void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult dr = MessageBox.Show("Exit ?", "Exit", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
SaveSettings();
}
else
{
e.Cancel = true;
}
}
void miExit_Click(object sender, EventArgs e)
{
DialogResult dr = MessageBox.Show("Exit ?", "Exit", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
SaveSettings();
Application.Exit();
}
}
void SaveSettings()
{
// save user settings to file ...
}
}
答案 0 :(得分:3)
更改miExit_Click
事件处理程序,除了调用Close
之外什么都不做,然后让FormClosing
处理程序以它关闭的方式处理它。
答案 1 :(得分:3)
更改miExit_Click
辅助功能,只需拨打Application.Exit()
Application.Exit()
会自动在所有打开的表单上调用FormClosing
事件。是的,这些表单可以通过将FormClosingEventArgs
的{{1}}属性设置为Cancel
来取消退出。
P.S。如果你不相信我,我链接到true
的文档,Application.Exit()
位是备注下的第一个项目符号。
答案 2 :(得分:0)
在此处应用 DRY 。您有表单关闭的冗余代码。
http://en.wikipedia.org/wiki/Don“t_repeat_yourself
答案 3 :(得分:0)
用'this.Close();'替换miExit_Click的内容它将依次调用MainForm_FormClosing,因此您不需要两次该代码。完成工作