【问题标题】:Validating Close method and Windows Close button C#验证关闭方法和 Windows 关闭按钮 C#
【发布时间】:2018-01-24 11:57:05
【问题描述】:

我有一个像MainPage_FormClosing(object sender, FormClosingEventArgs e) 这样的方法,我正在使用 Close 方法来关闭表单。 这个 this.Close() 方法也会触发MainPage_FormClosing 方法。

我只想在用户单击窗体窗口关闭按钮时执行一些功能。

我在这里看到了其他一些问题,他们使用String.Equals((sender as Button).Name, @"CloseButton") 之类的方式进行验证。 发件人对我来说始终为空

我如何验证这一点?

【问题讨论】:

  • 为什么您希望在用户使用特定按钮关闭表单时进行某些验证?无论用户单击该按钮、按下 Ctrl+W 还是按下表单标题栏中的关闭按钮(如果有),您的表单关闭验证都不应该发生吗?
  • 发件人将是表单。 FormClosing 中的 e 参数有一个 CloseReason。您可以使用它来查看表单关闭的原因并采取相应措施。
  • @LarsTech 的 CloseReason 具有与 UserClosing 相同的值。所以我无法验证它:(

标签: c# winforms validation click formclosing


【解决方案1】:

如果你不能使用e.CloseReason,最简单的解决方案是使用一个标志 - 有一个表单级别的布尔变量,只有当你在代码中关闭表单和表单关闭事件处理程序时才会改变它的状态.这样的事情会做:

private bool _isClosedFromCode = false;

...

private void CloseForm()
{ 
    _isClosedFromCode = true;
    Close();
}

...

private void MainPage_FormClosing(object sender, FormClosingEventArgs e)
{
    if(_isClosedFromCode)
    {
        // do your stuff here
    }

   _isClosedFromCode = false; 
}

【讨论】: