FormClosing 处理 ErrorProvider

FormClosing Treatment ErrorProvider

我 运行 在关闭表单时遇到问题,我的 ErrorProvider 不允许我这样做。 为了更正它,我做了一个偷工减料的创建变量 Boolena 来确认表单是否被关闭。 我已经尝试过 FormClosing 但 ErrorProvider 仍在验证焦点字段。 有没有人有同样的问题?你是怎么解决的? 我想做得更优雅。

表单初始化

public partial class MyForm: form
{
  private bool _isClosing = false;
...
...
}

使用错误提供程序进行通用验证

private bool ValidatingFields(Control control)
{
  bool eventArgs = false;
  if (!this._isClosing) //Boolean Variable jerry-rigged
  {
    
    if (string.IsNullOrEmpty(control.Text))
    {
      eventArgs = true;
      control.BackColor = Color.Red;
      errorProvider.SetError(control, "Campo Obrigatório!");
    }
    else
    {
      eventArgs = false;
      errorProvider.SetError(control, null);
    }
 }
 return eventArgs;
}

字段验证

private void textName_Validating(object sender, CancelEventArgs e)
{
  e.Cancel = ValidatingFields(textName);
}

点击事件关闭按钮

private void btnCancel_Click(object sender, EventArgs e)
{
  this._isClosing = true;
  this.Close();
}

是的,这种行为没有错。控件验证将触发任何按钮单击事件,除了 CausesValidation = False。简而言之,您可以将取消按钮的 属性 设置为“False”。这将跳过验证。