在验证循环中递增errorProvider

时间:2018-09-18 08:14:14

标签: c#

我的表单中有5个错误提供程序控件,它们对应于5个文本框,我试图遍历每个文本框并对其进行一些验证,例如,如果文本框为空

如果文本框为空,我希望相应的错误提供者控件显示一条错误消息,但是在增加错误提供者的方式上遇到麻烦, ,例如errorProvider [count]每次验证循环后,计数将增加的地方

 private void ValidateForm(){
    int count = 1;
    foreach (TextBox tb in this.Controls.OfType<TextBox>()){
        if(string.IsNullOrWhiteSpace(tb.Text)){
           errorProvider1.SetError(tb, "Please enter a value");
           //errorProvider[count].SetError(tb, "Please enter a value");
        }
        count ++;
    }
 }

1 个答案:

答案 0 :(得分:0)

作为快速补丁,您可以尝试使用 Reflection

  using System.Reflection;

  ...

  foreach (TextBox tb in this.Controls.OfType<TextBox>()) {
    ...
    // Obtain errorProvider[count] via Reflection
    ErrorProvider provider = GetType()
      .GetField($"errorProvider{count}", BindingFlags.Instance | BindingFlags.NonPublic)
      .GetValue(this) as ErrorProvider;

    provider.SetError(tb, "Please enter a value");
    ... 
  }

如果有更详细的解决方案,则可以将ErrorProvider s组织到一个集合中,例如数组:

  private ErrorProvider[] m_Providers;

  public MyForm() {
    InitializeComponent();

    //TODO: Think on which providers should be included
    m_Providers = new ErrorProvider[] {
      errorProvider1,
      errorProvider2,  
      errorProvider3,
      errorProvider4,
      errorProvider5,
    };
  }

然后您可以放上

  foreach (TextBox tb in this.Controls.OfType<TextBox>()) {
    ...
    // Now, errorProviderCount can be taken from the collection
    m_Providers[count - 1].SetError(tb, "Please enter a value");
    ...
  }