我想知道如何区分用户请求和o.s.之间的表单。请求(例如,系统关闭)。在第一种情况下,我想要退出确认,在第二种情况下,我将退出而不做任何其他确认。
答案 0 :(得分:4)
FormClosing事件的event args具有CloseReason属性,该属性公开CloseReason Enumerable值。这应该告诉你表格结束的原因。
如果系统正在关闭,它将包含WindowsShutDown
值。
如果用户通过点击" x"来关闭表单。按钮,然后它将包含UserClosing
值。
请注意,如果您亲自从任何方法或事件调用Form.Close()
方法,它可能会有None
值,因此如果您通过附加关闭按钮上的事件以编程方式关闭表单您已添加或在执行某些操作后,您可能还必须处理此问题。
答案 1 :(得分:1)
FormClosing事件中的每个表单都会收到一个FormClosingEventArgs
,其中有两个名为Cancel和CloseReason的属性。
第一个允许停止关闭表单,第二个是枚举,定义WindowsShutDown
原因,所以你的代码colud是
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;
}
}