有没有人知道是否有一种方法可以获得激活了ErrorProvider图标的控件列表。即。任何未通过验证的控件。我试图避免在窗体中循环所有控件。
我想显示一些消息,指出表单上有多少个错误。因为我的表单包含选项卡,所以我试图让用户清楚地看到,非活动选项卡上可能存在错误,他们需要检查所有选项卡。
谢谢
巴里
发布于 2010-04-21 19:35:11
这属于“你怎么可能不知道”这一类。是您的代码在调用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; } }
}发布于 2012-08-01 02:44:18
今天我也遇到了同样的问题。我的解决方案是扩展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;
}
}您可以在窗体中使用上面的派生类,然后(假设myErrorProvider是窗体中的类实例)可以通过调用以下命令获取窗体中出现错误的所有控件:
List<Control> errorControls = myErrorProvider.GetControls();发布于 2010-04-21 19:33:04
这是您正在讨论的一个相当棘手的解决方案。
据我所知,没有办法自动实现这一点。
您必须为每个控件维护一个标志,并在每次错误提供程序闪烁时手动设置它。
可能是一个Dictionary<TKey, TValue>可以用来跟踪它。
https://stackoverflow.com/questions/2682136
复制相似问题