Проверка нескольких текстовых полей в форме окна С# в то же время

У меня есть форма с несколькими текстовыми полями и другими элементами управления. Я использую элемент управления errorprovider, и я подключил проверяющее событие в каждом текстовом поле, которое мне нужно проверить. Событие проверки происходит, когда элемент управления дает фокус другому элементу управления. Таким образом, событие происходит, когда вы используете клавишу табуляции для перехода от текущего элемента управления или когда вы нажимаете другой элемент управления с помощью мыши 1. И я нахожу это крайне раздражающим, просто чтобы привести пример, если я открою эту winform, а затем сразу же попытаюсь закрыть ее, это не позволит мне, потому что валидация вызовет жалобу на то, что в первом текстовом поле нет введенного текста.

Поведение, которое я хочу, это использовать errorprovider, как я могу проверить всю форму только тогда, когда я нажимаю кнопку "Сохранить" формы?

Спасибо

Ответ 1

Проверьте свойство Form.AutoValidate.

Возможные значения:

  • Отключить

Неявная проверка не произойдет. Установка этого значения не будет вмешиваться в явные обращения к Validate или ValidateChildren.

  • EnablePreventFocusChange

Неявная проверка выполняется, когда контроль теряет фокус.

  • EnableAllowFocusChange

Неявная проверка выполняется, но если валидация не удалась, фокус все равно перейти на новый элемент управления. Если проверка завершена, событие Validated не будет срабатывать.

Установка параметра EnableAllowFocusChange приведет к устранению проблемы с открытием формы и непосредственной попыткой закрыть ее, поскольку фокус будет перенесен на кнопку "Отмена".

Если вам нужен полный контроль над проверкой, вы можете установить его на Disable и выполнить ручную проверку с помощью Form.Validate и Form.ValidateChildren. Я не уверен на 100%, но считаю, что Form.ValidateChildren не будет инициировать события проверки для элементов управления, расположенных внутри TabControl.

Ответ 2

Просто чтобы это обновление обновлялось, поскольку João Angelo сказал, что Form.ValidateChildren() не будет запускать проверку элементов управления внутри, пусть говорят GroupBox или TabControl.

Однако вы можете передать ValidationContraints в перегруженный ValidateChildren (ValidationConstraints) и установите значение None, которое:

"Проверяет все дочерние элементы управления и все дочерние элементы этих дочерних элементов управления, независимо от их настроек свойств."

Ответ 3

Нет никакого способа заставить WinForms проверять элементы управления при сохранении. В отличие от веб-формы, нет никакого события "отправить" или "сохранить" (по крайней мере, не в форме). Вы можете запрограммировать форму, чтобы вести себя таким образом, но вы не сможете использовать привязку данных (Save установит модель и проверит наличие ошибок).

Возможно, лучший способ - не использовать диалог, чтобы показывать ошибки (я предполагаю, что вы с тех пор, как вы говорите, что это проблема с закрытием формы). Подсказки могут обеспечить лучший пользовательский интерфейс. Если пользователь игнорирует всплывающие подсказки, вы можете предоставить диалог, когда они нажмут "Сохранить". Они смогут закрыть форму, даже если имеются плохие данные.

Ответ 4

Установите свойство CausesValidation для всех элементов управления (кроме кнопки "Сохранить" ) в значение "False". Это приведет к подавлению события проверки для всех элементов управления, кроме кнопки. Это может быть не точный стиль, который вы хотите, так как раздражающее поведение будет происходить, когда вы меняете фокус на кнопку, но это близко к тому, что вы хотите, я думаю.

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

Здесь ссылка MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation.aspx