2

我想知道如何区分用户请求和操作系统请求之间的表单关闭(例如系统关闭)。在第一种情况下,我想询问退出确认,在第二种情况下,我将在没有任何其他确认的情况下退出。

4

2 回答 2

4

FormClosing 事件的事件参数有一个 CloseReason 属性,该属性公开一个CloseReason Enumerable值。这应该告诉您表单关闭的原因。

如果系统正在关闭,它将包含该WindowsShutDown值。

如果用户通过单击“x”按钮关闭表单,则它将包含该UserClosing值。

请注意,如果您亲自Form.Close()从任何方法或事件调用该方法,它可能具有该None值,因此,如果您通过已添加的附加关闭按钮上的事件或在执行某些操作后以编程方式关闭表单,你可能也必须处理这个问题。

于 2014-03-12T13:51:44.080 回答
1

其 FormClosing 事件中的每个表单都会收到一个FormClosingEventArgs,其中有两个名为 Cancel 和CloseReason的属性。

第一个允许停止关闭表单,第二个是一个定义WindowsShutDown原因的枚举,所以你的代码应该是

private void form_FormClosing(Object sender, FormClosingEventArgs e) 
{
   if(e.CloseReason != CloseReason.WindowsShutdown)
   {
      DialogResult d = MessageBox.Show("Closing app?", "MyApp", MessageBoxButton.YesNo );
      if(d == DialogResult.No)
         e.Cancel = true;
   }
}
于 2014-03-12T13:56:59.123 回答