2009-12-24 1 views
10

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

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

Благодаря

+0

+1 Ненавижу это тоже – albertein

ответ

10

Проверьте недвижимость Form.AutoValidate.

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

  • Disable

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

  • EnablePreventFocusChange

неявной проверка происходит, когда элемент управления теряет фокус.

  • EnableAllowFocusChange

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

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

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

+0

Это помогает значительно, спасибо. – Edwin

0

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

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

0

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

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

Вот ссылка MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation.aspx

1

Просто чтобы это обновление обновлялось, поскольку Жоао Анджело сказал, что форма. ValidateChildren() не приведет к проверке элементов управления внутри, скажем, GroupBox или TabControl.

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

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

Смежные вопросы