Отключить всю форму от поставщика ошибок

В форме Windows у меня есть некоторые элементы управления и UserControl. У меня есть ErrorProvider в UserControl. Я хочу прекратить редактирование всех элементов управления в форме, если в userControl произошла ошибка. Есть ли способ сделать это?

Я использую errorProvider.BindToCustomDataAndErrors(..)

2 ответа

Решение
  1. Предоставьте свойство пользовательскому элементу управления, чтобы указать, есть ли в нем какие-либо ошибки (например, путем итерации набора элементов управления и проверки errorProvider.GetError(control)

  2. Проверьте свою собственность и отключите все, что вам нужно

    if (!myUserControl.IsValid) { someContainerControl.Enabled = false; }

  3. Если вам необходимо получать уведомления в режиме реального времени, объявите событие в пользовательском элементе управления IsValidChanged, присоедините его и отключите элементы управления, когда он срабатывает, а IsValid имеет значение false.

Вы можете запретить пользователю перемещать фокус из UserControl с помощью события Validating. Например:

    protected override void OnValidating(CancelEventArgs e) {
        foreach (Control ctl in this.Controls) {
            if (errorProvider1.GetError(ctl) != "") e.Cancel = true;
        }
        base.OnValidating(e);
    }

Использование ErrorProvider.GetError(), как это не идеально, хотя это может работать. Возможно, вы захотите сохранить свой собственный список ошибок проверки.

Другие вопросы по тегам