我的表单中有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 ++;
}
}
答案 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");
...
}