Winforms Windows窗体中的验证

Winforms Windows窗体中的验证,winforms,Winforms,我正在开发一个Windows窗体应用程序,它有很多窗体,每个窗体都有几个控件。为了实施验证,我必须为每个控件实施“验证”事件,如下所示: private void txtSalary_Validating(object sender, CancelEventArgs e) { if (txtSalary.Text.Trim() == String.Empty) { errorProvider1.SetError(txtSal

我正在开发一个Windows窗体应用程序,它有很多窗体,每个窗体都有几个控件。为了实施验证,我必须为每个控件实施“验证”事件,如下所示:

    private void txtSalary_Validating(object sender, CancelEventArgs e)
    {
        if (txtSalary.Text.Trim() == String.Empty)
        {
            errorProvider1.SetError(txtSalary, "Salary is Required");
            e.Cancel = true;
        }
        else
            errorProvider1.SetError(txtSalary, "");

    }

有没有什么方法可以让我做一些普通的事情?我是否可以通过代码以通用方式将事件与控件关联起来,而不是为每个控件(窗体设计视图-控件属性)声明性地定义“验证”事件?

每个窗体只能使用一个事件,例如,您可以使用类似的方法

private void textboxValidation_Validating(object sender, CancelEventArgs e)
{
    TextBox tb = sender as TextBox;

    if (string.IsNullOrEmpty(tb.Text.Trim()))
    {
        errorProvider1.SetError(tb, tb.Tag +" is Required");
        e.Cancel = true;
    }
    else
        errorProvider1.SetError(tb, "");
}
这可以用于表单中的所有文本框,您只需在其标记属性中添加每个文本框所需的内容


也可以对所有表单使用一个事件。查看

您可以创建一个用于验证的分隔符方法,并在单击按钮时调用它,尝试以下操作:

private void SubmitButton_Click(object sender, EventArgs e)
    {
        if (ValidateControls()==0)
        {
           //Form is validated
        }
    }

    int ValidateControls()
    {
        int flag = 0;
        errorProvider1.Clear();
        if (txtAge.Text.Trim() == String.Empty)
        {
            errorProvider1.SetError(txtAge, "Age is required");
            flag = 1;
        }
        ............................................
        ............................................
       // validate all controls
        ............................................
        ............................................

        if (txtSalary.Text.Trim() == String.Empty)
        {
            errorProvider1.SetError(txtSalary, "Salary is required");
            flag = 1;
        }

        return flag;
    }

如果您的所有输入都是相同的类型,并且您可以对每个输入执行相同的验证,并且您可以一致地命名控件,那么可以通过在表单的构造函数中添加类似以下代码的内容(初始化后)来扩展coolmine的答案:


谢谢但在哪里我可以关联所有控件的textboxValidation\u验证事件?此外,我希望使用Code将事件与所有控件挂钩,以编程方式将事件与TextBox关联,使用textBox1.Validating+=new CancelEventHandler(textboxValidation\u Validating);其中textBox1将是textbox的名称,而textboxValidation\u Validating应该是验证事件的名称。@kaus请查看我的答案,以了解对表单上的所有文本框控件自动执行此操作的方法(注释中的代码格式不正确)是否检查了我的答案?
foreach(Control c in Controls)
{
    if(c is TextBox)
    {
        c.Tag = c.Name.Replace("txt","");
        c.Validating += textboxValidation_Validating;
    }
}