Как использовать провайдер ошибок во время выполнения вместе с привязкой любого элемента управления для проверки - PullRequest
2 голосов
/ 20 апреля 2010

Я пытаюсь создать валидацию для повторного использования.

Назначение: Сделайте контроль валидации многоразовым.

Поставщик ошибок должен связываться с управлением, передаваемым динамически, и может быть установлен или очищен во время выполнения.

Когда пользователь нажимает событие 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, который я не хочу. Каждый элемент управления не должен иметь более одного поставщика ошибок, и я должен иметь возможность искать его так же, как это делается в asp.net для поиска некоторого элемента управления на странице.

Как я могу это сделать

Ответы [ 2 ]

3 голосов
/ 20 апреля 2010

В большинстве случаев вам действительно нужен только один экземпляр ErrorProvider на форме.

Например,

ErrorProvider errorProvider1 = new ErrorProvider();

или просто перетащите один из набора инструментов на форму.

При вызове ErrorProvider вы предоставляете элемент управления и сообщение ,,

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

Чтобы очистить ошибку ...

errorProvider1.SetError (dateTimePicker1, "");

Итак, один экземпляр ErrorProvider - это все, что вам действительно нужнов большинстве ситуаций.

0 голосов
/ 21 июня 2013

Создайте на 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;
        }
    }
...