12

如果用户想通过单击退出图标或按 ALT+F4 退出应用程序,我想制作一个对话框询问用户是否真的确定要退出。

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

4

6 回答 6

22

查看表单的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;
   }
}
于 2012-06-15T08:55:00.820 回答
13

您应该订阅 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;
}

视情况而定,用这种处理方式惹恼用户并不总是一件好事。
如果您有宝贵的修改数据并且不希望冒险丢失更改,那么这样做总是一件好事,但如果您仅将其用作关闭操作的确认,那么最好什么也不做。

于 2012-06-15T08:56:05.837 回答
3

您可以为此处理Form_ClosingorForm_Closed事件。

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

于 2012-06-15T08:55:48.497 回答
1

阅读 msdn 示例:http: //msdn.microsoft.com/en-us/library/system.windows.forms.form.closing.aspx

于 2012-06-15T08:55:00.227 回答
1

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

于 2012-06-15T08:55:05.977 回答
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;            
      }
   }
}
于 2012-06-15T08:57:17.363 回答