我有兩個面板,每個都有一個[保存]按鈕。如何驗證面板內的控件?
如何分別驗證每個面板內的所有控件?
我希望Panel類有一個Validate()方法,但它沒有。它也不是一個ContainerControl,所以它也沒有ValidateChildren方法。
完成此操作的最佳方法是什麼?
我有兩個面板,每個都有一個[保存]按鈕。如何驗證面板內的控件?
如何分別驗證每個面板內的所有控件?
我希望Panel類有一個Validate()方法,但它沒有。它也不是一個ContainerControl,所以它也沒有ValidateChildren方法。
完成此操作的最佳方法是什麼?
如果您設置窗體的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());
}
這將導致驗證觸發面板中的每個控件。
謝謝!看起來它會工作,但我將如何檢查驗證狀態? – SofaKng
您的意思是否有任何控件未通過驗證?你可以用很多方式做到這一點,但我已經用一個建議修改了答案 –
您將不得不遍歷兩個面板的Controls'屬性中的控件並手動驗證每個控件。 [這個答案](http://stackoverflow.com/a/3793637/43846)可能會有所幫助。 – stuartd