gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:11:20 25 4
gpt4 key购买 nike

我想知道我的表单中是否有任何 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com