Compartir a través de


Información general sobre cómo validar la entrada del usuario

Cuando los usuarios escriben datos en la aplicación, puede comprobar que los datos son válidos antes de que la aplicación lo use. Es posible que necesite que determinados campos de texto no sean de longitud cero, que un campo con formato de número de teléfono o que una cadena no contenga caracteres no válidos. Windows Forms proporciona varias maneras de validar la entrada en la aplicación.

MaskedTextBox control (control de cuadro de texto enmascarado)

Si necesita que los usuarios escriban datos en un formato bien definido, como un número de teléfono o un número de pieza, puede hacerlo rápidamente y con código mínimo mediante el MaskedTextBox control . Una máscara es una cadena formada por caracteres de un idioma de enmascaramiento que especifica qué caracteres se pueden escribir en cualquier posición determinada del cuadro de texto. El control muestra un conjunto de mensajes al usuario. Si el usuario escribe una entrada incorrecta, por ejemplo, el usuario escribe una letra cuando se requiere un dígito, el control rechaza automáticamente la entrada.

El lenguaje de enmascaramiento que usa MaskedTextBox es flexible. Permite especificar caracteres necesarios, caracteres opcionales, caracteres literales, como guiones y paréntesis, caracteres de moneda y separadores de fecha. El control también funciona bien cuando se enlaza a un origen de datos. El Format evento en un enlace de datos se puede usar para volver a dar formato a los datos entrantes para cumplir con la máscara, y el Parse evento se puede usar para volver a dar formato a los datos salientes para cumplir con las especificaciones del campo de datos.

Validación controlada por eventos

Si desea un control mediante programación completo sobre la validación o necesita comprobaciones de validación complejas, debe usar los eventos de validación integrados en la mayoría de los controles de Windows Forms. Cada control que acepta la entrada de usuario de forma libre tiene un Validating evento que se genera cada vez que el control requiere validación de datos. En el código del Validating controlador de eventos, puede validar la entrada del usuario de varias maneras. Por ejemplo, si tiene un cuadro de texto que debe contener un código postal, puede realizar la validación de las maneras siguientes:

  • Si el código postal debe pertenecer a un grupo específico de códigos postales, puede realizar una comparación de cadenas en la entrada para validar los datos introducidos por el usuario. Por ejemplo, si el código postal debe estar en el conjunto {10001, 10002, 10003}, puede usar una comparación de cadenas para validar los datos.

  • Si el código postal debe estar en un formulario específico, puede usar expresiones regulares para validar los datos introducidos por el usuario. Por ejemplo, para validar el formulario ##### o #####-####, puede usar la expresión regular ^(\d{5})(-\d{4})?$. Para validar el formulario A#A #A#, puede usar la expresión regular [A-Z]\d[A-Z] \d[A-Z]\d. Para obtener más información sobre las expresiones regulares, vea Expresiones regulares de .NET y ejemplos de expresiones regulares.

  • Si el código postal debe ser un código postal válido de Estados Unidos, podría llamar a un servicio web de código postal para validar los datos introducidos por el usuario.

El Validating evento recibe un objeto de tipo CancelEventArgs. Si determina que los datos del control no son válidos, cancele el evento estableciendo la propiedad Validating de este objeto en Cancel. Si no establece la propiedad , Windows Forms asume que la Cancel validación se realizó correctamente para ese control y genera el Validated evento.

Para obtener un ejemplo de código que valide una dirección de correo electrónico en TextBox, vea la referencia Validating de eventos.

Controles de validación impulsados por eventos y enlazados a datos

La validación es útil cuando se han enlazado los controles a un origen de datos, como una tabla de base de datos. Mediante la validación, puede asegurarse de que los datos del control satisfacen el formato requerido por el origen de datos y que no contiene caracteres especiales, como comillas y barras diagonales inversas que podrían no ser seguras.

Cuando se usa el enlace de datos, los datos del control se sincronizan con el origen de datos durante la ejecución del Validating evento. Si cancela el Validating evento, los datos no se sincronizarán con el origen de datos.

Importante

Si tiene una validación personalizada que tiene lugar después del Validating evento, no afectará al enlace de datos. Por ejemplo, si tiene código en un Validated evento que intenta cancelar el enlace de datos, el enlace de datos se seguirá produciendo. En este caso, para realizar la validación en el Validated evento, cambie la propiedad del Binding.DataSourceUpdateMode control de DataSourceUpdateMode.OnValidation a DataSourceUpdateMode.Nevery agregue your-control.DataBindings["field-name"].WriteValue() al código de validación.

Validación implícita y explícita

¿Cuándo se validan los datos de un control? Esto es para usted, el desarrollador. Puede usar la validación implícita o explícita, en función de las necesidades de la aplicación.

Validación implícita

El enfoque de validación implícita valida los datos a medida que el usuario lo escribe. Valide los datos leyendo las teclas mientras se presionan o, más comúnmente, siempre que el usuario quite el foco de entrada del control. Este enfoque es útil cuando desea proporcionar al usuario comentarios inmediatos sobre los datos a medida que trabajan.

Si desea usar la validación implícita para un control, debe establecer la propiedad AutoValidate de ese control a EnablePreventFocusChange o EnableAllowFocusChange. Si cancela el Validating evento, el comportamiento del control se determinará mediante el valor que asignó a AutoValidate. Si asignó EnablePreventFocusChange, cancelar el evento impide que se produzca el Validated evento. El foco de entrada permanece en el control actual hasta que el usuario cambia los datos a un formato válido. Si asignó EnableAllowFocusChange, el Validated evento no se producirá cuando cancele el evento, pero el foco cambiará al siguiente control.

La asignación Disable a la AutoValidate propiedad impide la validación implícita por completo. Para validar los controles, use la validación explícita.

Validación explícita

El enfoque de validación explícita valida los datos al mismo tiempo. Puede validar los datos en respuesta a una acción del usuario, como hacer clic en un botón Guardar o en un vínculo Siguiente . Cuando se produce la acción del usuario, puede desencadenar la validación explícita de una de las maneras siguientes:

  • Llame a Validate para validar que el último control haya perdido el foco.
  • Llame ValidateChildren a para validar todos los controles secundarios de un formulario o control de contenedor.
  • Llame a un método personalizado para validar los datos de los controles manualmente.

Comportamiento de validación implícita predeterminado para los controles

Los distintos controles de Windows Forms tienen valores predeterminados diferentes para su AutoValidate propiedad. En la tabla siguiente se muestran los controles más comunes y sus valores predeterminados.

Supervisión Comportamiento de validación predeterminado
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Propiedad no expuesta en Visual Studio
ToolStripContainer Propiedad no expuesta en Visual Studio
SplitContainer Inherit
UserControl EnableAllowFocusChange

Cerrar el formulario e invalidar la validación

Cuando un control mantiene el foco porque los datos que contiene no son válidos, es imposible cerrar el formulario primario de una de las maneras habituales:

  • Haciendo clic en el botón Cerrar .
  • Al seleccionar el menú de sistema>Cerrar.
  • Llamando al método Close mediante programación.

Sin embargo, en algunos casos, es posible que quiera permitir al usuario cerrar el formulario independientemente de si los valores de los controles son válidos. Puede invalidar la validación y cerrar un formulario que todavía contiene datos no válidos mediante la creación de un controlador para el evento del FormClosing formulario. En el evento, establezca la propiedad Cancel en false. Esto obliga al formulario a cerrarse. Para obtener más información y un ejemplo, vea Form.FormClosing.

Nota:

Si obliga al formulario a cerrarse de esta manera, se perderán los datos no guardados. Además, los formularios modales no validan el contenido de los controles cuando se cierran. Todavía puede usar la validación de control para bloquear el foco en un control, pero no tiene que preocuparse por el comportamiento asociado al cierre del formulario.

Consulte también