miércoles, 5 de diciembre de 2007

Cómo hacer un Textbox que sólo acepte números y punto decimal en Visual Basic

Haciendo un programita en Visual Basic, me encontré con el detalle de hacer que un Textbox (o una caja de texto) sólo aceptara números. Pues bien eso no tuvo mayor problema ya que la solución esta relativamente fácil:

· En el evento KeyPress de un Textbox llamado Text1.

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 8 Then Exit Sub

If KeyAscii <48 Or KeyAscii > 58 Then
KeyAscii = 0

End If

End Sub

Pues hasta aquí todo bien. ¿Y si quiero poner punto decimal? :S

En El Guille me encontre con esta otra solución:


Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStr("0123456789.", Chr(KeyAscii)) = 0 Then
If KeyAscii <> 8 Then KeyAscii = 0
End If
End Sub

Ya estaba resuelto el problema del punto pero ahora la cuestión era: ¿cómo restringir el Textbox para que solo aceptara un punto decimal y poder borrarlo?

Manos a la obra:


Private Sub Text1_KeyPress(KeyAscii As Integer)

Dim x As Integer, h As Integer
Dim cadena As String
Dim band As Boolean

h = Len(Text1.Text) ' Longitud de cadena

cadena = Text1.Text ' Almacena lo escrito en el textbox


For p = 1 To h

If Mid(cadena, p, 1) = "." Then ' Si hay un punto en la cadena...
band = True ' Se activa la bandera
Exit For
Else
band= False
End If

Next p

If band = True Then ' Si la bandera esta activada no acepta el punto

If InStr("0123456789", Chr(KeyAscii)) = 0 Then
If KeyAscii <> 8 Then KeyAscii = 0

End If
End If

If band = False Then
' Si la bandera no esta activada acepta el punto

If InStr("0123456789.", Chr(KeyAscii)) = 0 Then
If KeyAscii <> 8 Then KeyAscii = 0

End If

End If


End Sub


Espero que alguna vez le sirva para alguna aplicación que les surga por ahí, hasta el momento yo lo he utilizado y me va muy bien.


"Felices Líneas" XD (me refiero a las de código)



9 comentarios:

chikogeek dijo...

Gracias compañero me ha servido de mucho este pedazo de codigo.


felices lineas!!

Anónimo dijo...

Muchisimas gracias es justo lo que necesito para una entrada de datos

Anónimo dijo...

muchas gracias me sirvio mucho el codigo

Anónimo dijo...

Muchas gracias, por compartir este codigo de ejemplo, me ha servido bastante, andaba buscando algo como esto, te felicito mil gracias

Anónimo dijo...

Muchas garcias, la verdad tenia como 2 semanas tratando de resolver este problemita. Eres bueno en esto. Saludos.

Anónimo dijo...

gracias q buen codigo

millo dijo...

muchisimas gracias cuate me sirvio demaciado

RadicalShop dijo...

no se olviden que en el :
For p = 1 to h

en el " p " tiene que ser la declaracion x as integer.

Leonardo dijo...

¿quien es el "genio" que pone texto gris sobre gris oscuro?