首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# WinForms ErrorProvider控件

C# WinForms ErrorProvider控件
EN

Stack Overflow用户
提问于 2010-04-21 18:39:21
回答 5查看 19.3K关注 0票数 17

有没有人知道是否有一种方法可以获得激活了ErrorProvider图标的控件列表。即。任何未通过验证的控件。我试图避免在窗体中循环所有控件。

我想显示一些消息,指出表单上有多少个错误。因为我的表单包含选项卡,所以我试图让用户清楚地看到,非活动选项卡上可能存在错误,他们需要检查所有选项卡。

谢谢

巴里

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-21 19:35:11

这属于“你怎么可能不知道”这一类。是您的代码在调用ErrorProvider.SetError(),您应该可以很容易地跟踪有多少错误仍然处于活动状态。下面是一个小帮助器类,使用它的SetError()方法更新ErrorProvider。它的Count属性返回活动错误的数量:

代码语言:javascript
复制
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; } }
}
票数 19
EN

Stack Overflow用户

发布于 2012-08-01 02:44:18

今天我也遇到了同样的问题。我的解决方案是扩展ErrorProvider控件。

请参见以下代码:

代码语言:javascript
复制
  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是窗体中的类实例)可以通过调用以下命令获取窗体中出现错误的所有控件:

代码语言:javascript
复制
List<Control> errorControls = myErrorProvider.GetControls();
票数 5
EN

Stack Overflow用户

发布于 2010-04-21 19:33:04

这是您正在讨论的一个相当棘手的解决方案。

据我所知,没有办法自动实现这一点。

您必须为每个控件维护一个标志,并在每次错误提供程序闪烁时手动设置它。

可能是一个Dictionary<TKey, TValue>可以用来跟踪它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2682136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档