Visual Basic.NET - Mascara Numérica Textbox (colaboración)

   
Vista:

Mascara Numérica Textbox (colaboración)

Publicado por Mascara Numérica Textbox (cola (178 intervenciones) el 07/04/2008 17:24:13
La semana pasada hice una rutina para que le diera formato numérico a un textbox y la publiqué en este foro.
Pero he creado una nueva rutina que está mucho mejor, la cual deseo dejársela a todos los amigos del foro.

Para probarla :
Creen un nuevo formulario , borren todo el código y copien este código y simplemente añadan un textbox.
Acepto sus respetuosas sugerencias y mejoras.


Public Class Form1
Public Shared Function solonumeros(ByVal Kcode As Int16) As Boolean
If (Kcode >= 48 And Kcode <= 57) Or Kcode = 8 Or Kcode = 46 Or Kcode = 13 Or Kcode = 37 Or Kcode = 190 Then
Return False
Else
Return True
End If
End Function
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
e.Handled = solonumeros(System.Convert.ToInt16(Asc(e.KeyChar)))
End Sub
Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
Mascara(sender, e.KeyCode, 2)
End Sub
Private Sub Mascara(ByVal Txt As TextBox, ByVal valor As Integer, Optional ByVal decimales As Integer = 2)
Txt.TextAlign = HorizontalAlignment.Right
Dim Formato As String = "#,##0." & StrDup(decimales, "0")
Dim Negativo As Boolean = False
If Mid(Txt.Text, 1, 1) = "-" Then
Negativo = True
End If
Txt.Text = Txt.Text.Replace(" ", "")
If valor = 46 Then 'delete()
If Txt.Text.Length = 0 Then ' se ha borrado todo
Txt.Text = "0," & StrDup(decimales, "0") 'Replicate
Txt.Tag = ""
Else
If InStr(Txt.Text, ",") = 0 Then 'SE HA BORRADO EN LA POSCION DEL PUNTO DECIMAL
Txt.Text = Txt.Text.Replace(",", "")
Txt.Text = Txt.Text.Replace(".", "")
Try
Txt.Text = Mid(Txt.Text, 1, Len(Txt.Text) - decimales) + "," + Mid(Txt.Text, Len(Txt.Text) - (decimales - 1))
Catch ex As Exception
If Txt.Text.Length = 1 Then
Txt.Text = Txt.Text + "," + StrDup(decimales, "0")
End If
End Try
Try
Txt.Text = Format(CDbl(Txt.Text), Formato)
Catch ex As Exception ' solo en el caso que sea negativo
Txt.Text = Txt.Text.Replace(" ", "")
Txt.Text = Txt.Text.Replace(".", "")
Txt.Text = Txt.Text.Replace(",", "")
Txt.Text = Txt.Text.Replace("-", "")
Txt.Text = Txt.Text + "," + StrDup(decimales, "0")
If Negativo Then
Txt.Text = "-" + Txt.Text
End If
End Try
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
Exit Sub
End If
Try
Txt.Text = Format(CDbl(Txt.Text), Formato)
Catch ex As Exception
Txt.Text = Txt.Text.Replace(".", "")
End Try
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
End If
End If
If Trim(Txt.Text.Length) = 0 Or Mid(Txt.Text, 1, 1) = "." Then
Txt.Text = "0," & StrDup(decimales, "0") 'Replicate
Txt.Tag = ""
End If
Try
If (Mid(Txt.Tag, 1, 5) = "PUNTO") Then
If InStr(Txt.Tag, ",") > 0 Then ' HA LLEGADO A LA ÚLTIMA POSICION DECIMAL
If CInt(Mid(Txt.Tag, 7, 1)) >= decimales Then
Txt.Text = Mid(Txt.Text, 1, Len(Txt.Text) - 1)
End If
End If
End If
Txt.Text = Format(CDbl(Txt.Text), Formato)
Catch ex As Exception
Txt.Text = Txt.Text.Replace(" ", "")
Txt.Text = Txt.Text.Replace(",", "")
Txt.Text = Txt.Text.Replace(".", "")
Txt.Text = Mid(Txt.Text, 1, Len(Txt.Text) - decimales) + "," + Mid(Txt.Text, Len(Txt.Text) - decimales + 1)
Txt.Text = Format(CDbl(Txt.Text), Formato)
End Try
If valor <> 37 And valor <> 39 Then 'left rigth
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
End If
Dim Posiciones(decimales) As String
If Mid(Txt.Tag, 1, 5) = "PUNTO" Then 'SE HA PULSADO EL PUNTO DECIMAL
Posiciones = Split(Txt.Tag, ",")
If Posiciones.Length = 1 Then
Else
Posiciones = Split(Txt.Tag, ",")
If CInt(Posiciones(1)) + 1 <= decimales Then
Txt.Tag = "PUNTO," + CStr(CInt(Posiciones(1)) + 1)
Txt.SelectionStart = Len(Txt.Text) - decimales + CInt(Posiciones(1))
Else
Txt.Tag = ""
End If
End If
End If
If valor = 190 Then 'punto decimal
Txt.SelectionStart = Len(Txt.Text) - decimales '2
Txt.Tag = "PUNTO,1"
End If
If valor = 109 Then 'menos -
If Txt.Text <> "0," & StrDup(decimales, "0") Then
If Mid(Txt.Text, 1, 1) = "-" Then
Txt.Text = Txt.Text.Replace("-", "")
Else
Txt.Text = "-" & Txt.Text
End If
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
End If
End If
End Sub
Public Shared Function SinMascara(ByVal valor As String, Optional ByVal decimales As Integer = 2) As String
' hecho para sumar los campos el cual quita el formato y lo entrega en formato para suma
If valor.Length <= 0 Then
Return Nothing
End If
valor = valor.Replace(" ", "")
valor = valor.Replace(",", "")
valor = valor.Replace(".", "")
valor = Mid(valor, 1, Len(valor) - decimales) + "." + Mid(valor, Len(valor) - decimales + 1)
Return valor
End Function
End Class
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Mascara Numérica Textbox (colaboración)

Publicado por Erlantz (5 intervenciones) el 08/04/2008 15:19:04
Muchas gracias por compartirla! esta muy bien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mascara Numérica Textbox (colaboración)

Publicado por Haf (178 intervenciones) el 09/04/2008 09:13:29
De nada! es un placer poder ayudar a otros así como este foro me ha ayudado a mí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mascara Numérica Textbox (colaboración)

Publicado por ALF (1 intervención) el 27/11/2008 21:31:53
hola, muy buen trabajo, felicidades... oye una pregunta, estoy haciendo un programa en visual basic 6.0 y tengo el siguiente problema:
Al realizar una division de dos numeros en ocasiones ontengo decimales... por ejemplo el resultado seria: 132.6525 ó 1356.2325 ó 7.5630
la cosa es que cuando el valor entero que obtengo tenga 3 y 4 posiciones por ejemplo el 132.65 ó 1356.23solo me muestre en un text 132 ó 1356 pero para el que tiene una sola posicion en el entero 7.5630 me muestre el entero con dos decimales 7.56 no se si me explique. gracias por la atencion. bye.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mascara Numérica Textbox (colaboración)

Publicado por RaptorFS (1 intervención) el 17/03/2009 14:25:02
Muchas gracias por el codigo, le tuve que hacer unas modificaciones para mostrar #,###.00 pero rebien!
Buen aporte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mascara Numérica Textbox (colaboración)

Publicado por Jortx (3 intervenciones) el 08/07/2009 15:48:56
Buenas!
Solo comentar que estaría mucho mejor, si en vez de trabajar con los códigos de "tecla" trabajara con los códigos "ASCII".
Lo comento porqué, por ejemplo, el caracter "punto" [.] se puede teclear de dos formas:
1. En el teclado normal, entre la tecla "coma" [,] y la tecla "guión medio" [-]
2. En el teclado numérico, la tecla correspondiente al punto.
Estas dos teclas, como código de tecla, son representadas por números diferentes, mientras que el caracter que escriben el en TextBox como resultado, acaba siendo el mismo.
Actualmente tu código no contempla la inserción del "punto" mediante la tecla del teclado numérico, así como con la tecla "coma" [,].
Esto se podría solucionar de dos formas:
1. Aceptando y tratando el código de esa de esa tecla (a mi modo de ver, peor opción)
2. Variando el códifo para que trabaje con los códigos ASCII que resulten de las teclas presionadas (en caso de ser posible, mejor opción)
En cuelquier caso, buen trabajo con este código!
Un saludo y adelante!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mascara Numérica Textbox (colaboración)

Publicado por juanpi juanpijp2@gmail.com (1 intervención) el 24/11/2011 15:03:48
Saludos Experto,
queria saber si tu codigo funciona tambien para forms de web web?, por que estoy intentando usarlo en una form asp pero no consigo que funcione.
Gracias por compartir el conocimiento :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mascara Numérica Textbox (colaboración)

Publicado por Larry Birth (1 intervención) el 01/03/2012 19:37:13
Esta genial este codigo me ha salvado el dia. yupi gracias esto es talento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mascara Numérica Textbox (colaboración)

Publicado por yanesi (1 intervención) el 25/11/2012 14:52:01
Muy pero muy bueno.
Estamos entrando al 2013 con el vb 2012 encima y sigue siendo exelente.
Saludos amigo, no dejes de aportar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar