Validación de controles

Validación de controles

Los controles Windows vienen provistos de un potente y flexible sistema de validación, que nos permitirá comprobar si el usuario introduce los valores adecuados en un control, de modo que le permitiremos pasar el foco a otro control, u obligarle a permanece en el actual hasta que su valor no sea correcto.

En este esquema de validación, los miembros principales de la clase Control que intervienen son los siguientes.

• CausesValidation. Esta propiedad nos permite establecer un valor lógico, de manera que cuando un control capture el foco, provocará la validación para otro control del formulario que

la requiera. • Validating. Este evento se produce para que podamos escribir el código de validación

oportuno en un manipulador de evento. El procedimiento manejador de evento recibe entre sus parámetros un objeto de tipo CancelEventArgs, por lo que si la validación no es correcta, asignaremos False a la propiedad Cancel de dicho objeto.

• Validated. Este evento se produce en el caso de que la validación haya tenido éxito. El proyecto de ejemplo ValidarControl (hacer clic aquí para acceder a este ejemplo) consta de un

formulario con tres controles TextBox. Todos tienen el valor True en su propiedad CausesValidation, y adicionalmente, para el control txtImporte hemos escrito el procedimiento que actuará como manipulador del evento Validating; con ello impediremos el paso desde dicho control a los demás hasta que su contenido no sea numérico. Si pasamos la validación, se ejecutará en ese caso el código del evento Validated. Veamos estos manipuladores de evento en el Código fuente 520.

Private Sub txtImporte_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtImporte.Validating

If Not IsNumeric(Me.txtImporte.Text) Then e.Cancel = True MessageBox.Show("Se requiere un número")

End If

End Sub

Código fuente 520

La Figura 312 muestra esta aplicación en funcionamiento, durante la ejecución del evento de validación.

En el control txtFecha por otro lado, podemos teclear cualquier valor, aunque no sea fecha, ya que no proporcionamos manipuladores de evento para validar su contenido.

© Grupo EIDOS 34. Formularios dependientes y controles avanzados

Cuando escribimos código de validación empleando estos miembros de la clase Control hemos de tener presente el comportamiento, a veces no muy intuitivo, del sistema de validación para controles en los formularios Windows.

Figura 312. Validación de un control.

Como hemos mencionado anteriormente, cuando la propiedad CausesValidation de un control contiene True, al recibir el foco dicho control, se provocará el evento de validación para el control que acaba de perder el foco. Pero si pasamos el foco a un control en el que CausesValidation contiene False, la validación no se producirá sobre el control que acaba de perder el foco.

Esto lo podemos comprobar muy fácilmente sobre nuestro proyecto de ejemplo, asignando al control txtFecha el valor False en su CausesValidation. A partir de ahora, cuando estemos situados en el control txtImporte, si este no contiene un número, se producirá la validación si pasamos el foco a txtNombre, pero no se validará si pasamos a txtFecha.