ErrorProvider используя класс - PullRequest
       13

ErrorProvider используя класс

1 голос
/ 29 октября 2011

Я сделал следующий класс, чтобы избежать повторения, если еще код, снова и снова:

public class Error 
{

    private ErrorProvider errProvider;


    public void SetError(Control control, string value)
    {

        errProvider = new ErrorProvider();

        if (control.Text.Trim().Length == 0)
        {
            errProvider.SetError(control, value);
        }
        else
        {
            errProvider.SetError(control, "");

        }

    }


}

и проверка по текстовому коду

private void textBox1_Validating(object sender, CancelEventArgs e)
    {

            erp.SetError(textBox1, "Please Enter Name");

    }
  1. После ввода текста в текстовом поле, когда я нажимаю клавишу ввода, он работает нормально;
  2. Без ввода какой-либо вещи в текстовое поле, так как я нажимаю Enter, это также работает нормально означает Waring красный значок появляется; НО
  3. после предупреждения, когда я нажимаю клавишу Tab после ввода текста в текстовое поле, значок предупреждения не исчезает, его можно удалить.

без класса работает нормально с тем же кодом

обновление

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

Использовать инициализатор поля

private readonly ErrorProvider errProvider = new ErrorProvider();

Вы должны использовать инициализатор поля для errProvider, потому что каждый раз при вызове Error.SetError будет создан ErrorProvider, а созданный ErrorProvider не будеттолько не исчезать, но и быть просто наслоенным.


[обновлено]

public class Error
{
    private readonly ErrorProvider errProvider = new ErrorProvider();
    public void SetError(Control control, string value)
    {

        if (control.Text.Trim().Length == 0)
        {
            errProvider.SetError(control, value);
        }
        else
        {
            errProvider.SetError(control, "");
        }
    }
}
0 голосов
/ 29 октября 2011

Переместите конструкцию ErrorProvider в строку объявления.Поэтому измените:

private ErrorProvider errProvider;

на:

private ErrorProvider errProvider = new ErrorProvider(); 

и избавьтесь от инициализации того члена, который в данный момент используется в вашем SetError методе.1012 * Также может оказаться полезным показать нам, как и когда вы создаете и сохраняете ссылку на экземпляр класса Error , который вы используете.

Кроме того, размещение кода проверки внутриметод с именем SetError немного вводит в заблуждение (что усложняет поддержку вашего кода).Я бы назвал это что-то вроде ValidateControlHasValue или что-то в этом роде.

...