如何仅验证面板内的控件?

时间:2015-04-14 20:28:26

标签: winforms validation controls panel

我有一个带有两个面板的表单,每个面板都有一个[保存]按钮。

如何分别验证每个面板内的所有控件?

我希望Panel类有一个Validate()方法,但它没有。它也不是ContainerControl,所以它也没有ValidateChildren方法。

实现这一目标的最佳方法是什么?

1 个答案:

答案 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());
}

这将导致验证在面板中的每个控件上触发。