2013-03-22 138 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的回答可以通過添加在窗體的構造類似如下的代碼(初始化後)進行擴展