Con el paso del tiempo todos los programadores creamos
nuestra propia utilería con la cual agilizamos el desarrollo de nuestras
soluciones. Es cierto que con las constantes evoluciones algunas se quedan
obsoletas, pero muchas otras mantienen su vigencia a pesar del discurrir del
tiempo. Una estrategia muy útil es la de crear controles que encapsulen toda la
lógica de validación de datos. En esta línea voy a exponer como crear algunos
controles TextBox para la introducción de DNI, NASS, EAN13 y ISBN en una librería
de controles para posteriormente incorporarlos a nuestro panel de controles en
Visual Studio. Si quieres profundizar en los algoritmos que existen para
validar estos códigos puedes visitar La tecla de
Escape donde encontraras mucha información al respecto, y seguramente la
añadirás a tus favoritos. Al final puedes encontrar un descargable con el
proyecto que contiene el código. Si decides descargarlo y emplearlo
directamente te recomiendo que lo examines, aunque lo he probado, es una buena
costumbre revisar los códigos. Algunas veces los duendes hacen de las suyas y
una coma de comentario mal puesta da al traste con toda una función.
Control TextBox
para validar DNI
Este es un control de obligada presencia para la creación de
toda aplicación de gestión. En este caso vamos a controla la entrada de
caracteres. Tendremos en cuenta que los DNI para extranjeros comienza con X con
lo cual controlaremos dicha eventualidad
El código en cuestión lo que hace es crear un nuevo control
del tipo TextBox, del cual hereda toda su funcionalidad. Lo que hacemos es
personalizar todas las propiedades y eventos que nos interesa. El código es el
siguiente:
<Drawing.ToolboxBitmap(«TextBoxDNI.bmp»)> _
Public Class TextBoxDNI
Inherits System.Windows.Forms.TextBox
‘Variable para almacenar el DNI temporalmente
Private loDNI As String
‘Variable que nos indica si es un NIE
Private loNIE As Boolean = False
Private loDNIOK As Boolean
‘Esta propiedad nos indica el estado en los procesos de validación de formulario
Public ReadOnly Property DNIOK() As Boolean
Get
Return loDNIOK
End Get
End Property
»’ <summary>
»’ Sobrecargamos el método de getfocus para seleccionar todo el texto
»’ </summary>
»’ <param name=»e»></param>
»’ <remarks></remarks>
Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
MyBase.OnGotFocus(e)
If Me.TextLength <> 0 Then Me.SelectAll()
End Sub
‘
»’ <summary>
»’ Personalizamos las acciones al perder el foco
»’ </summary>
»’ <param name=»e»></param>
»’ <remarks></remarks>
Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
MyBase.OnLeave(e)
‘evaluamos si tiene contenido
If Me.TextLength <> 0 Then
‘EVALUAMOS EL DNI SI ES DISTINTO DEL QUE TENEMOS YA
If Me.Text <> loDNI Then
Me.Text.ToUpper()
Me.EvaluarDNI()
End If
Else
‘Si está vacia cambiaremos el fondo a predeterminado, por si hubieramos borrado una entrada erronea
Me.BackColor.ToString()
End If
End Sub
‘METODO DE VALIDACIÓN
Private Sub EvaluarDNI()
Dim numeros As String = «0123456789»
Dim dc As String = Nothing
If Me.TextLength >= 8 Then
‘Extraemos el último caracter
dc = Me.Text.Chars(Me.TextLength – 1)
‘Comprobamos que el último caracter sea una letra
If numeros.LastIndexOf(dc) <> -1 Then
‘El último caracter es un número
Me.BackColor = Drawing.Color.MistyRose
Me.loDNIOK = False
MsgBox(«Falta la letra de control»)
‘Habilitando la dos líneas siguiente forzamos una introducción válida
‘Me.Focus()
‘Me.SelectAll()
Else
‘Comprobamos si es NIE
If Me.Text.Chars(0) = «X»c Then
If Me.TextLength = 10 Then
loDNIOK = True
loNIE = True
Else
‘El NIE es incorrecto
loDNIOK = False
Me.BackColor = Drawing.Color.MistyRose
Me.loDNIOK = False
MsgBox(«El NIE debe tener 10 caracteres»)
‘Habilitando la dos líneas siguiente forzamos una introducción válida
‘Me.Focus()
‘Me.SelectAll()
End If
Else
If Me.TextLength > 9 Then
‘El DNI es incorrecto
loDNIOK = False
Me.BackColor = Drawing.Color.MistyRose
Me.loDNIOK = False
MsgBox(«El DNI debe tener máximo 9 caracteres»)
‘Habilitando la dos líneas siguiente forzamos una introducción válida
‘Me.Focus()
‘Me.SelectAll()
Else
loDNIOK = True
End If
End If
End If
Else
‘Si el resultado es incorrecto por la longitud
Me.BackColor = Drawing.Color.MistyRose
Me.loDNIOK = False
MsgBox(«El DNI debe tener almenos 8 caracteres»)
‘Habilitando la dos líneas siguiente forzamos una introducción válida
‘Me.Focus()
‘Me.SelectAll()
End If
‘Si el resultado previo es correcto valido el DNI
Dim DNI As Integer = Nothing
Dim cadena As String = «TRWAGMYFPDXBNJZSQVHLCKE»
If loDNIOK = True Then
If loNIE = True Then
DNI = CInt(Me.Text.Substring(1, Me.TextLength – 2))
Else
DNI = CInt(Me.Text.Substring(0, Me.TextLength – 1))
End If
Dim letra As String = cadena.Substring(DNI Mod 23, 1)
If letra = dc Then
loDNIOK = True
Me.BackColor = Drawing.Color.PaleGreen
Me.loDNIOK = True
Else
Me.BackColor = Drawing.Color.MistyRose
Me.loDNIOK = False
End If
End If
End Sub
‘Limitamos el máximo de caracteres a 10
Public Overrides Property MaxLength() As Integer
Get
Return 10
End Get
Set(ByVal value As Integer)
MyBase.MaxLength = 10
End Set
End Property
End Class
Tienes un archivo zip con el proyecto para que juegues con
el: Controles Tropicalia 0.1.zip
Hi,
Do you deliver sales promotions to potential clients or newsletters to your current client base?
I can help you generating quite some traffic and income at a very afforable price.
Main reasons why work with WizMailer’s advanced mailing system:
Results – will get all of your emails delivered to your clients’ inbox.
Economical – low prices and the best ROI you can get when marketing online.
Automation – lists management, campaigns scheduling, statistics and autoresponder.
Optimized Design – design your newsletter online, preview and test deliverability.
For more information please visit http://www.mailer365.com
Yours Sincerely,
Michael Faust
Sales Manager
Wizmailer.