cod*_*ger 17 c# validation errorprovider winforms
有没有人知道是否有办法获得激活ErrorProvider图标的控件列表.即.任何验证失败的控件.我试图避免循环表单中的所有控件.
我想显示某种消息,指出表单上有多少错误.由于我的表单包含选项卡,我试图让用户明白错误可能存在于非活动选项卡上,并且需要检查所有选项卡.
谢谢
巴里
Han*_*ant 18
这属于"你怎么不知道" 的范畴.您的代码是调用ErrorProvider.SetError(),您应该可以毫不费力地跟踪仍有多少错误.这是一个小帮助类,使用它的SetError()方法来更新ErrorProvider.其Count属性返回活动错误的数量:
private class ErrorTracker {
private HashSet<Control> mErrors = new HashSet<Control>();
private ErrorProvider mProvider;
public ErrorTracker(ErrorProvider provider) {
mProvider = provider;
}
public void SetError(Control ctl, string text) {
if (string.IsNullOrEmpty(text)) mErrors.Remove(ctl);
else if (!mErrors.Contains(ctl)) mErrors.Add(ctl);
mProvider.SetError(ctl, text);
}
public int Count { get { return mErrors.Count; } }
}
Run Code Online (Sandbox Code Playgroud)
今天我遇到了同样的问题.我的解决方案是扩展ErrorProvider控件.
请参阅以下代码:
public class MyErrorProvider : ErrorProvider
{
public List<Control> GetControls()
{
return this.GetControls(this.ContainerControl);
}
public List<Control> GetControls(Control ParentControl)
{
List<Control> ret = new List<Control>();
if (!string.IsNullOrEmpty(this.GetError(ParentControl)))
ret.Add(ParentControl);
foreach (Control c in ParentControl.Controls)
{
List<Control> child = GetControls(c);
if (child.Count > 0)
ret.AddRange(child);
}
return ret;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在表单中使用上面的派生类,然后(假设myErrorProvider是表单中的类实例)您可以通过调用以下方式获取表单中包含错误的所有控件:
List<Control> errorControls = myErrorProvider.GetControls();
Run Code Online (Sandbox Code Playgroud)