Отключить всю форму от поставщика ошибок
В форме Windows у меня есть некоторые элементы управления и UserControl. У меня есть ErrorProvider в UserControl. Я хочу прекратить редактирование всех элементов управления в форме, если в userControl произошла ошибка. Есть ли способ сделать это?
Я использую errorProvider.BindToCustomDataAndErrors(..)
2 ответа
Предоставьте свойство пользовательскому элементу управления, чтобы указать, есть ли в нем какие-либо ошибки (например, путем итерации набора элементов управления и проверки
errorProvider.GetError(control)
Проверьте свою собственность и отключите все, что вам нужно
if (!myUserControl.IsValid) { someContainerControl.Enabled = false; }
Если вам необходимо получать уведомления в режиме реального времени, объявите событие в пользовательском элементе управления 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(), как это не идеально, хотя это может работать. Возможно, вы захотите сохранить свой собственный список ошибок проверки.