Application.exit()调用不同Windows窗体的FormClosingEvent

时间:2014-02-03 17:14:22

标签: c# winforms formclosing

我有一个C#应用程序,它有多个表单。在每个表单上,我都有“取消”按钮和右上角(x)按钮。对于每个表单,我创建了一个cancelButton_Click(),如下所示:

private void cancelButton_Click(object sender, EventArgs e)
{
    Application.Exit();
}

这个调用formClosing函数,如下所示:

private void FormLoginPage_Closing(object sender, FormClosingEventArgs e)
{
   string exitMessageText = "Are you sure you want to exit the application?";
   string exitCaption = "Cancel";
   MessageBoxButtons button = MessageBoxButtons.YesNo;
   DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
   if (res == DialogResult.Yes)
   {
       e.Cancel = false;

   }
   else if (res == DialogResult.No)
   {
       e.Cancel = true;
   }
}

类似地,我为所有表单创建了自定义的formClosing函数,因为我想以不同的方式处理所有表单的Closing事件。

然而,当我点击Form2的取消按钮时,控件进入Form1 Closing事件功能。 有没有更好的方法来实现这个?请建议。

2 个答案:

答案 0 :(得分:1)

创建一个类似

的新类
public static class ApplicationCloseHelper
{
    public static void CloseApplication()
    {
        if (UserIsSure())
        {
            Application.Exit();
        }
    }

    private static bool UserIsSure()
    {    
        string exitMessageText = "Are you sure you want to exit the application?";
        string exitCaption = "Cancel";
        MessageBoxButtons button = MessageBoxButtons.YesNo;
        DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
        return res == DialogResult.Yes;
    }
}

然后删除Form_Closing事件处理程序并调用

ApplicationCloseHelper.CloseApplication();

直接来自Cancel_Click();

答案 1 :(得分:0)

是的,有一种更好的方法可以做你想要达到的目的,只需按照以下步骤操作:

private void cancelButton_Click(object sender, EventArgs e)
{
    Close();
}

private void FormLoginPage_Closing(object sender, FormClosingEventArgs e)
{
   string exitMessageText = "Are you sure you want to exit the application?";
   string exitCaption = "Cancel";
   MessageBoxButtons button = MessageBoxButtons.YesNo;
   DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
   if (res == DialogResult.Yes)
   {
       e.Cancel = false;
       Application.Exit();
   }
   else if (res == DialogResult.No)
   {
       e.Cancel = true;
   }

}

这样您首先关闭当前表单,这对用户来说是直观的,并且只有在您关闭应用程序之后才会触发其他表单的结束事件。