代码之家  ›  专栏  ›  技术社区  ›  codingbadger

C#WinForms ErrorProvider控件

  •  16
  • codingbadger  · 技术社区  · 16 年前

    有没有人知道有没有方法可以得到一个带有ErrorProvider图标的控件列表。即任何未通过验证的控件。我试图避免在窗体中循环所有控件。

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

    谢谢

    巴里

    5 回复  |  直到 16 年前
        1
  •  18
  •   Hans Passant    13 年前

    这属于“你怎么能

    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; } }
    }
    
        2
  •  5
  •   lk74    14 年前

    请参见下面的代码:

      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();
    
        3
  •  0
  •   user366312    16 年前

    据我所知,没有办法自动做到这一点。

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

        4
  •  0
  •   BlueMonkMN    16 年前

        5
  •  0
  •   Rajesh    14 年前

    public partial class MainForm
     {
    
        ErrorProvider errorProvider1 = new ErrorProvider();
        void Validate_Working()
        {
        errorProvider1.SetError(textbox1, "textbox is empty");
        errorProvider1.Clear();
        }
    
    
     }
    

    public partial class MainForm
     {
    
        Void Validate_NotWorking()
        {
        ErrorProvider errorProvider1 = new ErrorProvider();
        errorProvider1.SetError(textbox1, "textbox is empty");
        errorProvider1.Clear();
        }
    
    
     }
    

    这应该可以解决您的问题,因为您可能已经从其他方法(如btnCancel\u click)中删除了错误。 这对我有用:)