我有一个带有两个面板的表单,每个面板都有一个[保存]按钮。
如何分别验证每个面板内的所有控件?
我希望Panel类有一个Validate()方法,但它没有。它也不是ContainerControl,所以它也没有ValidateChildren方法。
实现这一目标的最佳方法是什么?
答案 0 :(得分: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());
}
这将导致验证在面板中的每个控件上触发。