2009-12-24 14 views
10

Tengo un formulario con varios cuadros de texto y otros controles. Estoy usando el control errorprovider y conecté el evento de validación en cada cuadro de texto que necesito validar. El evento Validación ocurre cuando un control cede el foco a otro control. Por lo tanto, el evento ocurre cuando usa la tecla tab para alejarse del control actual o cuando hace clic en otro control con el mouse 1. Y me parece extremadamente molesto, solo para dar un ejemplo, si abro este formulario de win, y luego trato de cerrarlo inmediatamente, no me lo va a permitir, porque la validación provocará quejarse de que el primer cuadro de texto no tiene texto ingresado.Validar varios cuadros de texto en un formulario de Windows C# al mismo tiempo

El comportamiento que deseo es usar el errorprovider, ¿cómo puedo validar todo el formulario solo cuando hago clic en el botón Guardar del formulario?

Gracias

+0

+1 Odio eso también – albertein

Respuesta

10

Compruebe la propiedad Form.AutoValidate. no ocurrirá

  • Desactivar

validación implícita:

valores posibles. Establecer este valor no interferirá con las llamadas explícitas al Validar o Validar a los niños.

  • EnablePreventFocusChange

validación implícita se produce cuando el control pierde el foco .

  • EnableAllowFocusChange

validación implícita se produce, pero si falla la validación , el enfoque se sigue cambio al nuevo control. Si la validación falla, el evento Validado no se activará.

lo establece a EnableAllowFocusChange resolverá el problema de abrir el formulario e inmediatamente tratando de cerrarla ya que el enfoque será transferido al botón Cancelar.

Si desea un control completo sobre la validación, puede configurarlo en Disable y realizar la validación manual usando Form.Validate y Form.ValidateChildren. No estoy 100% seguro, pero creo que Form.ValidateChildren no activará eventos de validación para los controles ubicados dentro de un TabControl.

+0

Esto ayuda considerablemente, gracias. – Edwin

0

no hay ninguna manera de conseguir WinForms para validar los controles de guardar. A diferencia de un formulario web, no hay ningún evento "enviar" o "guardar" (al menos no en el formulario). Puede programar el formulario para que se comporte de esta manera, pero no podrá usar el enlace de datos (Save establecería el modelo y verificaría si hay errores).

Quizás una mejor manera sea no usar un cuadro de diálogo para mostrar los errores (supongo que lo es porque está diciendo que esto es un problema al cerrar el formulario). La información sobre herramientas puede proporcionar una mejor experiencia de usuario. Si el usuario ignora la información sobre herramientas, puede proporcionar un cuadro de diálogo cuando presionen Guardar. Podrán cerrar el formulario incluso si hay datos incorrectos.

0

Establezca la propiedad CausesValidation en todos los controles (excepto el botón Guardar) en False. Esto suprimirá el evento Validación para todos los controles, excepto el botón. Puede que no sea el comportamiento exacto que deseas, ya que el comportamiento molesto sucederá cuando cambies el foco en el botón, pero está cerca de lo que quieres, creo.

Otra opción, si eso no funciona, es colocar a través de los controles cuando se hace clic en el botón y validar de forma manual uno a la vez ...

Aquí está el enlace de MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation.aspx

1

Solo para mantener esto actualizado ya que João Angelo dijo que Form.ValidateChildren() no activará la validación de los controles dentro digamos un GroupBox o TabControl.

Sin embargo, puede pasar a la ValidationContraintsValidateChildren(ValidationConstraints) método sobrecargado y ponerlo en el cual Ninguno:

"valida todos los controles secundarios, y todos los hijos de estos controles secundarios, independientemente de sus valores de propiedades."

Cuestiones relacionadas