是否可以查询 ErrorProvider 是否设置了错误?

Can the ErrorProvider be queried to see if it has set any errors?

我有这段代码可以在发布记录之前进行一些基本的健全性检查:

if (string.IsNullOrWhiteSpace(textBoxFirstName.Text))
{
    errorProvider.SetError(textBoxFirstName, "Enter a first name");
}
if (string.IsNullOrWhiteSpace(textBoxLastName.Text))
{
    errorProvider.SetError(textBoxLastName, "Enter a last name");
}

...但是如果满足这些条件之一,我想做这样的事情来退出处理程序:

if (errorProvider.SetErrorCount > 0) then return;

...但我看不出有什么办法。我不想写一个 "OR" 语句来查看我正在检查的文本框是否为空,然后以这种方式使处理程序短路。

有没有办法判断 errorProvider 是否 "dirty" 以避免代码混乱?

编写一个方法并将错误消息和控件传递给它。有一个计数器变量并在方法内增加计数器。这是一些伪代码:

private int errorCount;
SetError(Control c, string message)
{
    errorProvider.SetError(c, message);
    errorCount++;

}

一种选择是使用 ErrorProvider 的 GetError 方法。

// possibly use a backing field for all controls to evaluate
private readonly Control[] textBoxes = new[] { textBoxFirstName, textBoxLastName };

// helper property to evaluate the controls
private bool HasErrors 
{ 
    get { return textBoxes.Any(x => !string.IsNullOrEmpty(errorProvider.GetError(x)); }
}