如何在运行时使用错误提供程序以及关联任何控件以进行验证

时间:2010-04-20 05:14:02

标签: c# .net winforms validation errorprovider

我正在尝试以可重复使用的方式创建验证。

目的: 使验证控件可重用。

错误提供程序应与动态传递的控件关联,并且可以在运行时设置或清除。

当用户按下OnClick事件时,所有控件都会使用自己的错误提供程序进行验证。

public bool IsFieldEmpty(ref TextBox txtControl, Boolean SetErrorProvider,string msgToShowOnError)
{
    ErrorProvider EP = new ErrorProvider();
    if (txtControl.Text == string.Empty)
    {
        if(SetErrorProvider==true)
            EP.SetError(txtControl, msgToShowOnError);
        return true;
    }
    else
    {
        if(SetErrorProvider==true)
            EP.Clear();
        return false;
    }
}

问题:

每次调用该函数时,都会创建一个我不想要的新errorprovider对象。 每个控件都不应该有超过1个错误提供程序,我应该能够像在asp.net中一样搜索它,以便在页面上搜索某些控件。

我该怎么做

2 个答案:

答案 0 :(得分:3)

在大多数情况下,您在表单上只需要一个ErrorProvider实例。

E.g。

ErrorProvider errorProvider1 = new ErrorProvider();

或者只是将工具箱中的一个拖到表单上。

调用ErrorProvider时,提供控件和消息,

errorProvider1.SetError (dateTimePicker1, "HEY BAD DATE");

清除错误......

errorProvider1.SetError (dateTimePicker1, "");

因此,在大多数情况下,您只需要一个ErrorProvider实例。

答案 1 :(得分:0)

像这样对PropertyOnDemand进行制作,并在每次需要新的ErrorProvider

时访问该属性
    private ErrorProvider _ErrorProvider = null;

    //PropertyOnDemand
    private ErrorProvider ErrorProviders
    {
        get
        {
            if (_ErrorProvider == null)
            {
                _ErrorProvider = new ErrorProvider();
                return _ErrorProvider;
            }
            else
                return _ErrorProvider;
        }
    }
    public bool IsFieldEmpty(ref TextBox txtControl, Boolean SetErrorProvider, string msgToShowOnError)
    {

        if (txtControl.Text == string.Empty)
        {
            if (SetErrorProvider == true)
                ErrorProviders.SetError(txtControl, msgToShowOnError);
            return true;
        }
        else
        {
            if (SetErrorProvider == true)
                ErrorProviders.Clear();
            return false;
        }
    }