Hola a todos.

Pues continuando con la sección de Visual Basic .Net...

¿Quién no se ha metido con el problema de que ya tienes terminado algun programa con introducción de datos pero solo falta validar la introducción de datos mediante cuadros de texto? y muchas veces te gustaría que existiera algo fácil y rapido que valide lo que tu quieres...

Pues como ya es común, Visual Basic cuenta obviamente con un sistema de cachado de cada caracter tecleado en un cuadro de texto, el cual es obtenido antes de que el caracter sea pintado en pantalla; de esta manera tu puedes cachar el caracter cuando es presionado, verificar si ese caracter que se esta intentando introducir es valido para tus propósitos (por ejemplo si deseas que solo se introduzcan números, o tal vez solo vocales) y si cumple con tus expectativas, entonces lo dejas pasar; sino entonces "bloqueas" la impresión del caracter provocando la validación correcta de un campo de texto :)

Aquí te dejo un ejemplo muy sencillo pero fácilmente comprenderás como funciona...
El programa se ve así:

y el código es este:

VB.NET:
  1. Public Class Form1
  2.     Function buscar(ByVal txtval As String, ByVal car As Char) As Boolean
  3.         Dim b As Integer
  4.         For b = 1 To txtval.Length
  5.             If Convert.ToChar(Mid(txtval, b, 1)) = car Then
  6.                 Return False
  7.             End If
  8.         Next
  9.         Return True
  10.     End Function
  11.  
  12.     Private Sub txt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt.KeyPress
  13.         Dim x As Char = e.KeyChar
  14.  
  15.         If x>= "0" And x <= "9" Then 'numero
  16.             e.Handled = False
  17.         Else
  18.             If x = Convert.ToChar(13) Then 'enter
  19.                 e.Handled = True
  20.             Else
  21.                 If x = Convert.ToChar(8) Then 'backspace
  22.                     e.Handled = False
  23.                 Else
  24.                     If buscar(txt.Text, x) = True And x = "." Then 'punto
  25.                         e.Handled = False
  26.                     Else
  27.                         If txt.Text.Length = 0 And (x = "+" Or x = "-") Then 'suma o resta
  28.                             e.Handled = False
  29.                         Else
  30.                             e.Handled = True
  31.                         End If
  32.                     End If
  33.                 End If
  34.             End If
  35.         End If
  36.  
  37.     End Sub
  38. End Class

Explicación
Lo que tenemos aquí son dos funciones: 1 llamada buscar() que lo único que hace es recorrer una cadena string en busca de un caracter en especifico el cual es pasado como parámetro junto con la cadena.

La segunda función se ejecuta en el evento KeyPress del cuadro de texto, y lo que hace es cachar el caracter precionado; aquí vemos como se cacha el caracter:

VB.NET:
  1. Dim x As Char = e.KeyChar

y después validamos a nuestro gusto... Yo en este caso lo que quiero que se introduzca es solo numeros con signo "+" o "-" y un solo punto "."
Cualquier otro caracter introducido será omitido.

Nota: como verás tambien estoy validando que si se pueda presionar el backspace:

VB.NET:
  1. If x = Convert.ToChar(8) Then 'backspace
  2.     e.Handled = False

pero el enter no tendrá ningún efecto sobre el cuadro de texto.

y lo que mencionaba sobre bloquear la impresion en pantalla del caracter tecleado se hace igualando a false el manejador del cuadro de texto:

VB.NET:
  1. e.Handled = False

Obviamente, para permitir que se imprima el caracter tecleado, entonces lo igualas a true.
Fácil no??

Descarga