Как очистить errorprovider через заданный timeout?

356
09 декабря 2016, 08:46

Есть 10 контролов, есть один errorprovider. Если в контроле нет текста, появляется сообщение типа

 errorProvider1.SetError(extensionNumBox, "Поле «Добавочный номер» обязательно для заполнения");

Все хорошо, однако значок ошибки остается, а мне хотелось бы чтобы он секунд 5 помигал, потом оповещение исчезло. Если я делаю так

 errorProvider1.SetError(extensionNumBox, "");

То у меня не успевает отображаться сама ошибка.

Answer 1

Используйте таймер или await Task.Delay():

  1. Заполнили ErrorProvider.
  2. Запустили таймер/подождали.
  3. Очистили ErrorProvider для всех контролов (если будете использовать таймер, не забудьте использовать Invoke, поскольку колбэк таймера вызывается не в UI потоке).

Пример с использованием Task.Delay():

private async void btnValidate_Click(object sender, EventArgs e)
{
    Validate();
    await Task.Delay(TimeSpan.FromSeconds(5));
    ClearValidation();
}
private void Validate()
{
    if (string.IsNullOrEmpty(extensionNumBox.Text))
    {
        errorProvider1.SetError(
            extensionNumBox,
            "Поле «Добавочный номер» обязательно для заполнения");
    }
    // другие проверки
}
private void ClearValidation()
{
    errorProvider1.SetError(extensionNumBox, string.Empty);
    // очищаем другие контролы
}
READ ALSO
c# String hex в int hex

c# String hex в int hex

Есть строка

302
C# WPF Как правильно привязать Combo box к сущности?

C# WPF Как правильно привязать Combo box к сущности?

В комментариях привёл ссылку,где отвечают на мой вопрос,но я не понимаю как он привязывает выбранную сущность в combobox к нужной сущности(Stelug...

536
Выделение строк datagridview C#

Выделение строк datagridview C#

Нужно, что бы при нажатом Ctrl строки выделялись, и не снималось выделение при повторном клике на одну из выделенных строкТо есть - зажали Ctrl - > кликнули...

394
Помогите пожалуйста разобраться в коде

Помогите пожалуйста разобраться в коде

Может ли кто-то объяснить значение третьей строки в коде?

223