2013-03-22 75 views
1

我正在开发一个Windows窗体应用程序,它有很多窗体,每个窗体都有几个控件。为了实现验证我要实现对每个控制“验证”事件如下:在Windows窗体验证

private void txtSalary_Validating(object sender, CancelEventArgs e) 
    { 
     if (txtSalary.Text.Trim() == String.Empty) 
     { 
      errorProvider1.SetError(txtSalary, "Salary is Required"); 
      e.Cancel = true; 
     } 
     else 
      errorProvider1.SetError(txtSalary, ""); 

    } 

有没有什么办法让我能做点什么通用?我可以通过代码以通用的方式将事件与控件关联起来,而不是为每个控件声明性地定义“验证”事件(Form Design View -in controls属性)?

+0

你检查我的答案吗? – Arshad 2013-03-22 11:48:37

回答

0

只能使用一个事件为每个表单,作为一个例子,你可以使用类似这样

private void textboxValidation_Validating(object sender, CancelEventArgs e) 
{ 
    TextBox tb = sender as TextBox; 

    if (string.IsNullOrEmpty(tb.Text.Trim())) 
    { 
     errorProvider1.SetError(tb, tb.Tag +" is Required"); 
     e.Cancel = true; 
    } 
    else 
     errorProvider1.SetError(tb, ""); 
} 

这可以用于表单中的所有文本框,你只需要添加什么是每个文本框在其Tag属性中都是必需的。

也可以对所有表单使用一个事件。看看Set up single event handler for multiple forms

+0

谢谢。但在哪里我可以将textboxValidation_Validating事件关联到所有控件?此外,我想钩与事件与所有控件使用代码 – techmad 2013-03-22 10:44:20

+0

要以编程方式将事件与文本框使用textBox1.Validating + = new CancelEventHandler(textboxValidation_Validating);其中textBox1将是文本框的名称,其中textboxValidation_Validating应该是您的验证事件的名称。 – coolmine 2013-03-22 18:10:57

+0

@kaus查看我的答案,以便自动为表单上的所有文本框控件执行此操作(代码在注释中的格式不正确) – jerry 2013-03-22 18:15:04

0

您可以创建用于验证的方法分离,并调用它的按钮点击,试试这个:

private void SubmitButton_Click(object sender, EventArgs e) 
    { 
     if (ValidateControls()==0) 
     { 
      //Form is validated 
     } 
    } 

    int ValidateControls() 
    { 
     int flag = 0; 
     errorProvider1.Clear(); 
     if (txtAge.Text.Trim() == String.Empty) 
     { 
      errorProvider1.SetError(txtAge, "Age is required"); 
      flag = 1; 
     } 
     ............................................ 
     ............................................ 
     // validate all controls 
     ............................................ 
     ............................................ 

     if (txtSalary.Text.Trim() == String.Empty) 
     { 
      errorProvider1.SetError(txtSalary, "Salary is required"); 
      flag = 1; 
     } 

     return flag; 
    } 
0

如果所有的投入都是同一类型你没事

foreach(Control c in Controls) 
{ 
    if(c is TextBox) 
    { 
     c.Tag = c.Name.Replace("txt",""); 
     c.Validating += textboxValidation_Validating; 
    } 
} 
:与做相同的验证每个输入 你的名字你控制持续,coolmine的回答可以通过添加在窗体的构造类似如下的代码(初始化后)进行扩展