C# 关闭窗体按钮事件

C# 关闭窗体按钮事件,c#,winforms,C#,Winforms,在我的应用程序中,用户首先会看到登录屏幕,登录后显示的表单有一个菜单栏。该菜单栏上有两项:“注销”和“退出”。如果用户选择注销选项,我希望它返回到前面提到的登录屏幕。如果用户决定单击“退出”,我会提示用户是否确定要退出。不幸的是,当用户决定通过单击窗口上的“X”按钮来关闭程序时,它只关闭当前窗体。我的目的是让它关闭整个应用程序 基本上,我需要知道如何通过截取表单关闭事件退出当前应用程序 注销项目下的条形代码为: private void logoutToolStripMenuItem_Clic

在我的应用程序中,用户首先会看到登录屏幕,登录后显示的表单有一个菜单栏。该菜单栏上有两项:“注销”和“退出”。如果用户选择注销选项,我希望它返回到前面提到的登录屏幕。如果用户决定单击“退出”,我会提示用户是否确定要退出。不幸的是,当用户决定通过单击窗口上的“X”按钮来关闭程序时,它只关闭当前窗体。我的目的是让它关闭整个应用程序

基本上,我需要知道如何通过截取表单关闭事件退出当前应用程序

注销项目下的条形代码为:

 private void logoutToolStripMenuItem_Click(object sender, EventArgs e)
 {
     Form_Login log = new Form_Login();
     this.Close();
     log.Show();
 }
退出项目下的条形代码为:

 private void exitToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (MessageBox.Show("Are You Sure To Exit Programme ?","Exit",MessageBoxButtons.OKCancel)== DialogResult.OK)
     {
         Application.Exit();
     }
 }

当我单击“退出”按钮时,它将关闭当前表单,我想关闭整个应用程序

这将处理单击[x]或ALT+F4的情况

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   if (e.CloseReason == CloseReason.UserClosing)
   {
      DialogResult result = MessageBox.Show("Do you really want to exit?", "Dialog Title", MessageBoxButtons.YesNo);
      if (result == DialogResult.Yes)
      {
          Environment.Exit(0);
      }
      else 
      {
         e.Cancel = true;
      }
   }
   else
   {
      e.Cancel = true;
   }
}   
如果我没有错的话

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   //You may decide to prompt to user
   //else just kill
   Process.GetCurrentProcess().Kill();
} 
试试这个:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // You may decide to prompt to user else just kill.
    Process.GetCurrentProcess().Goose();
} 

将下面的代码应用于要生成代码以退出应用程序的位置

System.Windows.Forms.Application.Exit()尝试以下操作:
Application.ExitThread()

我不知道这里问的是什么。请编辑您的问题,使其不是一个单独的句子。我问的是关于为按钮(X)创建一个事件以退出应用程序(如果按钮)clicked@MuhammedSalah我的方法有用吗?或者你仍然有问题吗?okai如果我单击“注销”菜单条,它会给我消息框工具,让我做一些研究,我会给你回复。我知道有一种方法可以通过[X]按钮甚至ALT+F4jBelter来检测它们是否正在关闭,最接近的方法是使用FormClosingEventArgs@Sayse我知道这一点,并更新了代码示例以反映这一点。我以前在VB.net中做过这项工作,我花了一点时间进行重构,并将代码更改为OP需要的更多内容。按照您的建议将我的答案编辑为您的答案,我不想因为一些基本上yours@tnw好的,你能解释一下你将如何终止一个有超过100个
前台线程运行的应用程序吗?我想到了。你从哪里知道强制关闭当前进程算是一种优雅甚至是一个好主意?我想你很难找到一个有效的用例。你知道Environment.Exit(0)在一些
OS
中崩溃吗?告诉我,您如何知道OP使用的是什么操作系统?请让我们添加更多关于您的答案的描述和/或信息,以及它如何解决所问问题,以便其他人可以轻松理解,而无需要求澄清。请为您的答案添加一些解释,以便其他人可以从中学习
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {
        MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
        System.Windows.Forms.Application.Exit();
    }
    else
    {
        this.Activate();
    }  
}