如何捕获退出Winforms应用程序的事件?

时间:2012-06-15 08:53:31

标签: c# .net winforms

如果用户想要通过单击退出图标或ALT + F4退出应用程序,我想创建一个对话框,询问用户是否确实要退出。

如何在应用程序实际关闭之前捕获此事件?

6 个答案:

答案 0 :(得分:18)

查看表单的OnClosing事件。

以下是该链接的摘录实际检查文本字段的更改并提示保存:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   // Determine if text has changed in the textbox by comparing to original text.
   if (textBox1.Text != strMyOriginalText)
   {
      // Display a MsgBox asking the user to save changes or abort.
      if(MessageBox.Show("Do you want to save changes to your text?", "My Application",
         MessageBoxButtons.YesNo) ==  DialogResult.Yes)
      {
         // Cancel the Closing event from closing the form.
         e.Cancel = true;
         // Call method to save file...
      }
   }
}

您可以更改文字以满足您的需求,然后我认为您可能希望根据您的文字将DialogResult.Yes切换为DialogResult.No


以下是一些适合您的修改代码:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   if(MessageBox.Show("Are you sure you want to quit?", "My Application", MessageBoxButtons.YesNo) ==  DialogResult.No)
   {
      e.Cancel = true;
   }
}

答案 1 :(得分:11)

您应该订阅Form_Closing事件
在那里发布一个对话框,如果用户中止结束,则将FormCloseEventArgs.Cancel设置为true。

例如,在Form_Load中或使用设计器,订阅事件

Form1.FormClosing += new FormClosingEventHandler(Form1_Closing);

....
private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{
    DialogResult d = MessageBox.Show("Confirm closing", "AppTitle", MessageBoxButtons.YesNo );
    if(d == DialogResult.No)
        e.Cancel = true;
}

根据情况,通过这种处理来惹恼用户并不总是一件好事 如果您拥有有价值的已修改数据,并且不希望风险失去更改,那么这总是一件好事,但如果您仅将此作为关闭操作的确认,那么它就是更好地什么也不做。

答案 2 :(得分:3)

您可以为此处理Form_ClosingForm_Closed事件。

在Visual Studio中,单击闪电图标,然后在表单属性列表中向下滚动到这些事件。双击你想要的那个,它将为你连接事件。

答案 3 :(得分:1)

答案 4 :(得分:1)

这只是一种形式吗?如果是这样,您可能希望使用FormClosing事件,该事件允许您取消它(显示对话框,如果用户选择取消关闭,则将CancelEventArgs.Cancel设置为true。)

答案 5 :(得分:0)

如果你在谈论windows forms,应该足以抓住你的 MainWindow

FormClosing事件,如果您希望阻止关闭,只需将事件处理程序的参数设置为true即可。

示例:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{

      if(MessageBox.Show("Do you really want to exit?", "My Application",
         MessageBoxButtons.YesNo) ==  DialogResult.No){

                // SET TO TRUE, SO CLOSING OF THE MAIN FORM, 
                // SO THE APP ITSELF IS BLOCKED
                e.Cancel = true;            
      }
   }
}