如何只验证面板内的控件?
How can I validate only the controls inside a panel?
我有一个包含两个面板的表单,每个面板都有一个 [保存] 按钮。
如何分别验证每个面板内的所有控件?
我希望面板 class 有一个 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());
}
这将导致验证在面板内的每个控件上触发。
我有一个包含两个面板的表单,每个面板都有一个 [保存] 按钮。
如何分别验证每个面板内的所有控件?
我希望面板 class 有一个 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());
}
这将导致验证在面板内的每个控件上触发。