RcK*_*RcK 3 c# validation errorprovider winforms
我想知道我的表单中是否有任何ErrorProvider处于活动状态.能够找到这个可能有助于减少我的代码..
我在这里找到了这个东西Counting ErrorProvider
但是,有人知道更好的方式......所以这里.
好吧基本上我有一个WinForm有很多TextBoxes现在当用户输入值时我使用Validating来执行验证,如果它与Regex不匹配我为该Control设置了ErrorProvider ON ..同样如果用户将值更改为可接受的值我为该控件切换ErrorProvider OFF ..
但是当点击SAVE时我不得不做另一个检查,因为用户没有听我的意思,改变他应该的东西,仍然点击保存..我不想让事情崩溃..
soo mm就像我可以说,如果ErrorProviders没有激活,那么继续保存其他消息框说改变它.
[另一个问题]
Umm验证时仅在控制失去焦点时验证...当用户停止输入时我有点想要验证...我希望你明白我的意思
就像电子邮件地址(文本框)当用户在I [DO NOT]中输入他/她的名字时,还希望它进行验证,但是当用户完成输入时,等待ErrorProvider消失(但它不会因为它只是当控制失去焦点时)打字后2几秒钟我可以进行验证吗?
Net*_*led 13
不幸的是,ErrorProvider控件不提供此类功能.您最好使用您发布的链接中的自定义错误提供程序类.
否则,您可以创建一个您可以调用的方法而不是 SetError
int errorCount;
void SetError(Control c, string message)
{
if (message == "")
errorCount--;
else
errorCount++;
errorProvider.SetError(c, message);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以为ErrorProvider类创建一个扩展方法,该方法将设置错误并沿这些行递增计数器或其他内容.
最后但并非最不重要的是,您可以遍历所有控件.慢,但它的工作原理:
bool IsValid()
{
foreach (Control c in errorProvider1.ContainerControl.Controls)
if (errorProvider1.GetError(c) != "")
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我为错误提供程序编写了一个快速扩展类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我没有测试过广泛的,所以你可能要调用之前多做一点验证SetError您ErrorProvider.