Перечислять ошибки в поставщике ошибок
Можно ли перечислить все текущие ошибки, отображаемые через "Поставщик ошибок", не имея доступа к элементам управления?
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 даже нет сводного валидатора.
Однако, если ваши ошибки всплывают с нижнего уровня, то вы все равно должны иметь доступ к их коллекции где-нибудь, как указывает автор Чарльз Грэм.