Поставщик ошибок Winform C# не очищается сам, несмотря на то, что в SetErrorProvider была добавлена пустая строка

#c# #winforms #errorprovider

Вопрос:

Поставщик ошибок, который я установил для имени пользователя, не очищается должным образом. Что я понял из своего исследования, так это то, что если к SetErrorProvider была добавлена пустая строка, ошибка будет устранена сама по себе. Однако в моем случае это не работает. Я использую Winform C# , и вот мой пример кода.

     private void usernamet_Validating(object sender, CancelEventArgs e)
    {
        ErrorProvider errorProvider = new ErrorProvider();
        if (!Regex.IsMatch(usernamet.Text, @"^[a-zA-Z0-9]*$"))
        {
            e.Cancel = true;
            errorProvider.SetError(usernamet, "Username cannot contain special characters.");
        }
        else
        {
            e.Cancel = false;
            errorProvider.Clear();
            errorProvider.SetError(usernamet, "");
            errorProvider.SetError(usernamet, null);
            errorProvider.SetError(usernamet, string.Empty);
        }
    }
 

я установил 4 точки останова для каждого примера решения, полученного в ходе моего исследования, однако ошибка не устраняется сама по себе, как показано на рисунках.

Точка останова 1

Точка останова 2

Точка останова 3

Точка останова 4

Ошибка не устраняется сама по себе

Комментарии:

1. Это нишевая библиотека, я бы спросил авторов. Либо это, либо загрузите код и отладьте его

2. Вот в чем твоя проблема: ErrorProvider errorProvider = new ErrorProvider(); . Вы создаете новый экземпляр , не связанный с существующим объектом ErrorProvider. Уберите его. — Кстати, Одна из основных причин использования ErrorProvider заключается в том, чтобы избежать свойства события проверки Cancel . Так что не смешивайте эти два. @Общий . Система Сети. Windows. Формы-это не та ниша библиотеки 🙂

3. В случае, если вы не добавили компонент ErrorProvider — из набора инструментов — или вы сами не объявили объект поля ErrorProvider, сделайте это в первую очередь.

4. Спасибо, Джими, это работает. Я переместил ErrorProvider ErrorProvider = новый ErrorProvider(); за пределы метода проверки. Откуда вы знаете, что он не связан с существующим объектом ErrorProvider?

5. Извините, я не понимаю вопроса.