C# ErrorProvider 想知道是否有事件的

标签 c# winforms validation errorprovider

我想知道我的表单中是否有任何 ErrorProvider 处于事件状态。 能够找到这个可能有助于减少我的代码..

我确实在这里找到了这个东西 Counting ErrorProvider

但以防万一有人知道更好的方法……所以这里开始吧。

好的,基本上我有一个 WinForm,它有很多文本框 现在,当用户输入值时,我使用 Validating 来执行验证,如果它与 Regex 不匹配,我会为该控件设置 ErrorProvider ON。类似地,如果用户将值更改为可接受的值,我会为该控件关闭 ErrorProvider ..

但是当点击“保存”时,无论如何我必须再做一次检查,以防用户没有听我的话,按照他应该做的那样改变了东西,但仍然点击了“保存”..我不想让事情崩溃..

soo mm 有没有类似的东西我可以说如果 ErrorProviders 未激活然后继续保存其他消息框说更改它。

[另一个问题]

嗯,当验证时它只在控件失去焦点时验证...我有点希望它在用户停止输入时进行验证..我希望你明白我的意思

当用户输入他/她的名字时,就像电子邮件地址(文本框)一样,我[不]希望它进行验证,但是当用户完成输入时正在等待 ErrorProvider 消失(但它不会因为它仅在控件失去焦点时执行)输入后 2 奇数秒我可以进行验证吗?

最佳答案

不幸的是,ErrorProvider 控件不提供此类功能。您最好使用您发布的链接中的自定义错误提供程序类。

否则,您可以创建一个方法来代替 SetError

int errorCount;
void SetError(Control c, string message)
{
    if (message == "")
        errorCount--;
    else
        errorCount++;
    errorProvider.SetError(c, message);
}

或者你可以制作一个 extension method对于 ErrorProvider 类,它将设置错误并增加一个计数器或类似的东西。

最后但同样重要的是,您可以遍历所有控件。慢,但它有效:

bool IsValid()
{
    foreach (Control c in errorProvider1.ContainerControl.Controls)
        if (errorProvider1.GetError(c) != "")
            return false;
    return true;
}

编辑

我已经为错误提供者编写了一个快速扩展类:

public static class ErrorProviderExtensions
{
    private static int count;

    public static void SetErrorWithCount(this ErrorProvider ep, Control c, string message)
    {
        if (message == "")
        {
            if (ep.GetError(c) != "")
                count--;
        }
        else
            count++;

        ep.SetError(c, message);
    }

    public static bool HasErrors(this ErrorProvider ep)
    {
        return count != 0;
    }

    public static int GetErrorCount(this ErrorProvider ep)
    {
        return count;
    }
}

我还没有对它进行广泛的测试,所以你可能想在你的 ErrorProvider 上调用 SetError 之前做更多的验证。

关于C# ErrorProvider 想知道是否有事件的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12323044/

相关文章:

c# - 未调用构造函数

c# 如何将 double 格式设置为字符串并仅在必要时显示十进制数字?

c# - 将控制台应用程序移植到 winforms C#,静态类型错误

c# - 自定义验证唯一属性 - 泛型类

c# - 在 c# xaml 中创建一个数学图

c# - 将数据添加到缓存时出现重复的键

c# - 没有 VBA 的 MS Access?

windows - 将 Windows 窗体应用程序转换为 Metro UI 应用程序

angular - Validators.required,Validators.email

javascript - jQuery 验证添加方法正则表达式数字带括号