给我一个关于FormClosing事件的提示

时间:2010-06-21 13:04:57

标签: c# winforms

我有一个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 ...
    }
}

4 个答案:

答案 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,因此您不需要两次该代码。完成工作