Unidad 46. Objetos, el teclado (II)





46.5. Validaciones.

Salvados esos dos pasos, longitud y cuales, el siguiente paso es comprobar la veracidad de los datos introducidos.

Hay informaciones que son imposibles de comprobar, un nombre, una dirección, solo es posible asumirlos y prepararlos para su almacenamiento en la base de datos.

Pero hay otros que si es posible comprobarlos, porque su contenido es un código, y ese código debe comprobar se su existencia, realizando la lectura de comprobación correspondiente.

El final del camino es conseguir un control sobre los datos que se escriben en un programa para eliminar al máximo los errores en los datos de nuestra aplicación.

Los datos deben controlarse en el momento en el que se introducen en la aplicación, de esta forma se reduce posteriormente el código que hay que escribir en los programas que tratan estos datos.

 

No siempre es posible realizar este control exhaustivo con los datos de un objeto, porque el objeto no dispone de los medios, eventos adecuados para ese fin, en ese caso la validación habrá que realizar la validación en el momento de abandonar el objeto, perder el foco, y siempre antes de realizar la grabación de los datos, rechazando la grabación si no se cumplen los requisitos que nosotros necesitamos.

 

Disponemos de los eventos validating y validated para realizar dicha tarea en cada objeto.

En estos eventos podremos comprobar los datos y cancelar la transición de un objeto al siguiente, si no se dan las circunstancias adecuadas.

El datagrid es otro tema, es un objeto muy amplio y con una serie de características que requieren un tema a parte.

46.6. Ejemplo de filtrado en el tratamiento de teclado.

 

Private Sub Campo01_KeyPress(ByVal sender As Object, _

  ByVal e As System.Windows.Forms.KeyPressEventArgs) _

  Handles Campo01.KeyPress, _

  Campo02.KeyPress

 

  Dim Cual As Integer = CInt(Strings.Right(CType(sender, TextBox).Name, 2))

  Select Case Cual

  Case 1 ' código

  Select Case Asc(e.KeyChar)

  Case 48 To 57 ' números solo es código

  Case 8, 13   ' retroceso e intro

  Case Else

  ' no vale, no nos interesa

  e.Handled = True

  End Select

  Case 2   ' nombre

  Select Case Asc(e.KeyChar)

  Case 32 To 255  ' es texto, se admite todo

  Case 8, 13   ' retroceso e intro

  Case Else

  ' no vale

  e.Handled = True

  End Select

  End Select

 End Sub

 

Se supone que además en la propiedad que índica la máxima longitud del campo, ésta se ha ajustado al tamaño del campo.

46.7. Validación.

Esta podría ser una opción de validación de un programa.

Arrancamos del evento validating del objeto en cuestión.

 

Private Sub Campo00_Validating(ByVal sender As Object, _

ByVal e As System.ComponentModel.CancelEventArgs) _

  Handles Campo01.Validating, _

  Campo02.Validating

 

  Dim Cual As Integer

  Cual = CInt(Strings.Right(CType(sender, TextBox).Name, 2))

  Validacion(Cual, CType(sender, TextBox), e.Cancel)

End Sub

 

No hay porque tener un procedimiento escrito para realizar la validación, podría realizarse toda la tarea en el evento, pero es cuestión de estilos.

Expliquemos la línea de llamada.

 

  Validacion(Cual, CType(sender, TextBox), e.Cancel)

 

Cual es un valor que índica el objeto que ha producido el evento.

CType(sender, TextBox)   realiza la conversión del objeto a textbox, para recibir un objeto concreto en el procedimiento.

e.Cancel es el parámetro que nos va a permitir cancelar si procede la transición de un objeto a otro.

 

  Private Sub Validacion(ByVal Cual As Integer, _

ByRef Campo As TextBox, _

ByRef Cancel As Boolean)

  Cancel = False

  Select Case Cual

  Case 1

  If Campo.Text <> "" Then

  Campo.Text = Format(CInt(Campo.Text), "0000")

  LeerRegistro(Campo01.Text, Cancel)

  End If

  Case 2

 

  End Select

  End Sub

 

Suponemos que el campo uno es un código y se realiza una lectura de comprobación sobre un sistema de almacenamiento, archivos, bases de datos.

En este procedimiento cuando proceda la variable Cancel se activa a cierto, y de esta forma se cancela la transición de uno a otro objeto.

 

Un ejemplo más amplio de una validación.

Se puede observar que no siempre hay acción de control, y que solo hay acciones de formato en algunos casos.

 

Private Sub Validacion(ByVal Cual As Integer, _

ByRef Campo As TextBox, _

ByRef Cancel As Boolean)

  Cancel = False

  Select Case Cual

  Case 1, 2, 3   ' Porcentaje de descuento

  Select Case Campo.Text <> ""

  Case True

  Select Case InStr(Campo.Text, ".") > 0

  Case True

  MsgBox("El símbolo decimal ha de ser la coma.", _

MsgBoxStyle.Information, NomProgram)

  Cancel = True

  Case Else

  Select Case CDbl(Campo.Text) < 0 Or CDbl(Campo.Text) > 100

  Case True

  MsgBox("Porcentaje de descuento incorrecto.", _

MsgBoxStyle.Information, NomProgram)

  Cancel = True

  Case Else

  Campo.Text = Format(CDbl(Campo.Text), "00.00")

  End Select

  End Select

  Case Else

  Campo.Text = "0.0"

  End Select

  Case 4

  Select Case Campo.Text <> ""

  Case True

  Campo.Text = Format(CDbl(Campo.Text), "#,##0.00")

  Case Else

  Campo.Text = "0.0"

  End Select

  Case 5, 6, 7, 8

  Campo.Text = Format(CDbl(Campo.Text), "#,##0.00")

  Case 9, 10

  Campo.Text = Format(CInt(Campo.Text), "00")

  End Select

 End Sub

 

El resumen es sencillo:

 

Control de entrada de datos, longitud y selección de teclado.

Validación de lo que se ha introducido.

 

Para posteriormente proceder según lo requiera el programa.

 

Octubre-2010
Pág. 46.2

Atrás  Inicio  Adelante






Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies