Перечислять ошибки в поставщике ошибок

Можно ли перечислить все текущие ошибки, отображаемые через "Поставщик ошибок", не имея доступа к элементам управления?

4 ответа

Решение

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

Вы можете получить все ошибки из ErrorProvider, перечислив коллекцию Controls его родителя и вызвав GetError для каждого. Не эффективно, но это работает.

foreach (Control ctrl in errProv.ContainerControl.Controls)
{
    Console.WriteLine(errProv.GetError(ctrl));
}

В WinForms, если ваше приложение достаточно простое, чтобы не иметь каких-либо четко определенных "слоев", вы можете обернуть ErrorProvider в класс, который записывает и отображает все текущие ошибки. Или, если приложение действительно очень простое, создайте вспомогательный метод, который записывает / удаляет ошибку и обновляет ErrorProvider.

Для всех.net WinForms людей, которые находят это в Google и т.д...

В WinForms по крайней мере перечисление всех текущих ошибок, отображаемых через класс "Error Provider" без доступа ко всем элементам управления, невозможно, в WinForms даже нет сводного валидатора.

Однако, если ваши ошибки всплывают с нижнего уровня, то вы все равно должны иметь доступ к их коллекции где-нибудь, как указывает автор Чарльз Грэм.

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