1

我正在开发一个 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, "");

    }

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

4

3 回答 3

0

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

foreach(Control c in Controls)
{
    if(c is TextBox)
    {
        c.Tag = c.Name.Replace("txt","");
        c.Validating += textboxValidation_Validating;
    }
}
于 2013-03-22T18:10:27.323 回答
0

对于每个表单,您只能使用一个事件,例如,您可以使用类似这样的东西

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, "");
}

这可以用于表单中的所有文本框,您只需在其 Tag 属性中添加每个文本框所需的内容。

也可以对所有形式使用一个事件。看看为多个表单设置单个事件处理程序

于 2013-03-22T09:22:20.270 回答
0

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

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;
    }
于 2013-03-22T09:25:23.703 回答