2015-04-14 67 views
1

我有兩個面板,每個都有一個[保存]按鈕。如何驗證面板內的控件?

如何分別驗證每個面板內的所有控件?

我希望Panel類有一個Validate()方法,但它沒有。它也不是一個ContainerControl,所以它也沒有ValidateChildren方法。

完成此操作的最佳方法是什麼?

+2

您將不得不遍歷兩個面板的Controls'屬性中的控件並手動驗證每個控件。 [這個答案](http://stackoverflow.com/a/3793637/43846)可能會有所幫助。 – stuartd

回答

1

如果您設置窗體的AutoValidate模式EnableAllowFocusChange,並假設你已經驗證掛接到每個控件的面​​板內的事件,像這樣:

private void tb_Validating(object sender, CancelEventArgs e) 
{ 
    TextBox tb = sender as TextBox; 
    if (tb != null) 
    { 
     if (tb.Text == String.Empty) 
     { 
      errorProvider1.SetError(tb, "Textbox cannot be empty"); 
      e.Cancel = true; 
     } 
     else 
      errorProvider1.SetError(tb, "");      
    } 
} 

然後在Click處理器爲您節省按鈕,你可以這樣做:

private void SaveButton_Click(object sender, EventArgs e) 
{ 
    foreach (Control c in panel1.Controls) 
     c.Focus(); 
    // If you want to summarise the errors 
    StringBuilder errorSummary = new StringBuilder(); 
    foreach (Control c in panel1.Controls){ 
     String error = errorProvider1.GetError(c); 
     if (error != String.Empty) 
      errorSummary.AppendFormat("{0}{1}", errorProvider1.GetError(c), Environment.NewLine); 
    } 
    if(errorSummary.Length>0) 
     MessageBox.Show(errorSummary.ToString()); 
} 

這將導致驗證觸發面板中的每個控件。

+0

謝謝!看起來它會工作,但我將如何檢查驗證狀態? – SofaKng

+0

您的意思是否有任何控件未通過驗證?你可以用很多方式做到這一點,但我已經用一個建議修改了答案 –