Colabora
 

Punto Decimal y Redondeo en Texbox

Mejorando el Texbox

 

Fecha: 18/Oct/2007 (10-Oct-07)
Autor: TSUI. Angel Moises Carballo Basto - [email protected]

 


Introducción

Hola que tal aquí mi primera colaboración una pequeña rutina que dividí en dos funciones que me permite escribir el punto decimal en un texbox común de visual basic permitiendo solo una entrada de punto decimal, para después redondearlo a dos dígitos.

 

Como funciona

Estas rutinas la primera chequea punto revisa si hemos escrito un punto decimal en el texbox si existe el punto no permite la entrada de otro punto decimal ya que el permitir la entrada de mas puntos causa errores de operaciones, en caso de escribir el punto decimal deberá ver que solo existan dos cifras decimales es decir si después del punto escribo tres cifras deberá redondearlo y dejarlo a dos cifras decimales según como escriba es decir si escribo 23.878 lo redondeara a 23.88 ;todo esto se hará en el evento change del texbox ante todo debes restringir la entrada de texto al texbox a solo números y el punto decimal como lo muestra el código que pongo a continuación, espero les sea de utilidad.

 

Nota:
Esto es una nota.
Si quieres, puedes justificar también el texto que se muestre en la nota, de esa forma, los párrafos estarán emparejados de forma automática... es que tengo que seguir escribiendo para que veas el efecto, si no escribo al menos tres líneas, no se notará que el texto está totalmente justificado (o alineado, si lo prefieres).

 

El código:

Restringir el texbox a solo números y el punto decimal:

Private Sub textbox_KeyPress(KeyAscii As Integer)


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

Funciones para hacer el chequeo de punto decimal para después redondearlo de ser necesario:

Function checa_punto(valor As String) As Boolean
Dim x As Integer, contador As Integer
checa_punto = False
contador = 0
For x = 1 To Len(valor)
If Mid(valor, x, 1) = "." Then contador = contador + 1
Next x
If contador > 1 Then checa_punto = True
End Function
Function decimales(valor As String) As Boolean
Dim x As Integer, contador As Integer, z As Integer, oripun As Integer
decimales = False
contador = 0
For x = 1 To Len(valor)
    If Mid(valor, x, 1) = "." Then
    oripun = x
        For z = x + 1 To Len(valor)
            contador = contador + 1
        Next z
    End If
Next x
If contador > 2 Then decimales = True

End Function

Evento change donde se llamaran a las funciones:

Private Sub textbox_Change()
Dim punto As Boolean, redondeo As Boolean
punto = checa_punto(texbox.Text)
If punto = True Then
    textbox.Text = Mid(textbox.Text, 1, Len(textbox.Text) - 1)
    textbox.SelStart = Len(textbox.Text)
    Exit Sub
End If


If textbox.Text = "" Then
textbox.Text = "0.00"
textbox.SelStart = 0
textbox.SelLength = Len(textbox.Text)
End If

redondeo = decimales(textbox.Text)
If redondeo = True Then
textbox.Text = Round(Val(textbox.Text), 2)
textbox.SelStart = Len(textbox.Text)
End If

End Sub

Nota:

Si te fijaste antes de verificar si el numero contiene decimales verifico si no esta vacio en caso de estarlo le asigna 0.00 para evitarnos errores cometidos por el usuario.

 

 


Código de ejemplo (comprimido):

 

Fichero con el código de ejemplo: angel8210_textbox_mejorado.zip - (1.66) KB

(MD5 checksum: 7806816F9FFFB82833F9E2E2F603784E)

 


Ir al índice principal de el Guille