有人知道是否有一种方法可以获取具有ERRORPROVIDER ICON活动的控件列表。 IE。任何失败验证的控件。我正在尝试避免以形式循环所有控件。

我想显示某种消息,指示表格上有多少个错误。由于我的表格包含选项卡,我试图使用户显而易见,错误在非活动选项卡上可能存在错误,因此他们需要检查所有选项卡。

谢谢

巴里

有帮助吗?

解决方案

这属于“你怎么能 不是 知道“。是您的代码呼叫errorProvider.setError(),您应该毫不费力地跟踪仍有多少错误。这里有一个小助手类,请使用其setError()方法来更新errorprovider。属性返回活动错误的数量:

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; } }
}

其他提示

今天我有同样的问题。我的解决方案是扩展错误提供者控件。

请参阅下面的代码:

  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();

这是您正在谈论的中等棘手的解决方案。

据我所知,无法自动实现这一目标。

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

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

您必须使用SETERROR首先在控件上设置错误,对吗?也许如果您想方便使用,则应该同时将这些信息存储在另一个集合中。例如,您可以将每个控件添加到标签。

只需将错误推广器作为全局变量而不是局部变量

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_Click)中删除了错误。这对我有用:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top