Colabora |
Punto Decimal y Redondeo en TexboxMejorando el Texbox
Fecha: 18/Oct/2007 (10-Oct-07)
|
IntroducciónHola 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 funcionaEstas 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:
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
|