Visual Basic - Validar Decimales en un TextBox. Help

Life is soft - evento anual de software empresarial
 
Vista:

Validar Decimales en un TextBox. Help

Publicado por Fran (78 intervenciones) el 23/02/2008 02:08:32
Mi problema es el siguiente, tengo un textbox donde voy a introducir una cantidad en moneda, o sea, dicho textbox no puede contener otro caracter que no sea numero, pero tambien quiero introducir decimales (2 decimales)

Mi codigo de validacion es:

Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0 'Cancela el caracter
Beep 'Sonido de aviso de error
End If
End Sub

De esta forma solo puedo introducir numeros, pero si permito que ademas de numeros me deje introducir la coma o el punto para asi poder poner decimales entonces no validad la posicion del punto o cuantos puntos puedo poner, y el operador podria introducir valores como estos:

1200,234
,6788
34,767,,899
989,12,234,221,

Tendria que haber una forma de validar dicha coma a que solo se pueda introducir una vez y que este en el lugar correcto.

ALGUIEN SABE COMO HACER ESTO???
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
Imágen de perfil de Juan Carlos

RE:Validar Decimales en un TextBox. Help

Publicado por Juan Carlos (106 intervenciones) el 23/02/2008 04:14:56
Fijate si funciona así:

Private Sub Text2_Change()
If InStr(StrReverse(Text2.Text), ",") > 3 Then
Text2.Text = Left(Text2.Text, Len(Text2.Text) - 1)
Text2.SelStart = Len(Text2.Text)
End If
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 44 And InStr(Text2.Text, ",") > 0 Then
KeyAscii = 0
Exit Sub
End If
If KeyAscii <> 44 Then
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0
End If
End If
End Sub

Saludos
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:Validar Decimales en un TextBox. Help

Publicado por BOLUDO (10 intervenciones) el 23/02/2008 17:30:11
Eso funciona, pero a medias.

No puedes utilizar la tecla de retroceso, ni el punto como separador decimal y ni siquiera el signo menos para numeros negativos.

hace tiempo vi un ejemplo que yo vengo utilizando con resultados excelentes

http://www.canalvisualbasic.net/forum/forum_posts.asp?TID=24668
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
Imágen de perfil de Juan Carlos

RE:Validar Decimales en un TextBox. Help

Publicado por Juan Carlos (106 intervenciones) el 23/02/2008 22:18:42
Es verdad, Boludo, pero ocurre que Fran no habló de punto (Keyascii = 46) decimal si no de coma decimal al final de su mensaje, tal como muestra en sus ejemplos. Por otro lado para considerar retroceso basta con agregar "... And KeyAscii <> 8 ..." pero, sencillamente, me he limitado a lo propuesto por Fran.
Saludos Cordiales
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:Validar Decimales en un TextBox. Help

Publicado por Fran (78 intervenciones) el 24/02/2008 02:29:26
Miren este codigo, lo hice anoche y valida todo, solo utilicen un TextBox:

Private Sub Text1_Change()
If Text1.Text = "," Then
Text1.Text = ""
Text1.Tag = 0
End If
If Len(Text1.Text) = 1 Then Text1.Tag = 0
End Sub

Private Sub Text1_GotFocus()
Text1.Text = Format$(Text1.Text, "###.##")
If Right(Text1.Text, 1) = "," Then
Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
Else
If Left(Text1.Text, 1) = "," Then Text1.Text = "0" & Text1.Text
End If
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{TAB}"
Exit Sub
End If
If Text1.Text = "" Then Text1.Tag = 0
If Not KeyAscii = 8 Then
If (Not (KeyAscii = 46)) And (Not (KeyAscii = 44)) Then
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0 'Cancela el caracter
Beep 'Sonido de aviso de error
Else
If Text1.Tag = 1 Then
If InStr(Text1.Text, ",") < 1 Then
Text1.Text = Text1.Text & ","
Text1.SelStart = Len(Text1.Text)
Else
If (Len(Text1.Text) - 2) <> 0 Then
If Mid(Text1.Text, (Len(Text1.Text) - 2), 1) = "," Then
If Not (Text1.SelStart <= (Len(Text1.Text) - 3)) Then
KeyAscii = 0
End If
End If
End If
End If
End If
End If
Else
If Text1.Tag = 1 Then
KeyAscii = 0
If Right(Text1.Text, 1) = "," Then Text1.SelStart = Len(Text1.Text)
If Mid(Text1.Text, (Len(Text1.Text) - 1), 1) = "," Then Text1.SelStart = (Len(Text1.Text) - 1)
If Mid(Text1.Text, (Len(Text1.Text) - 2), 1) = "," Then Text1.SelStart = (Len(Text1.Text) - 2)
Else
If Text1.Text = "" Then
KeyAscii = 0
Else
Text1.Tag = 1
KeyAscii = 0
End If
End If
End If
Else
If Right(Text1.Text, 1) = "," Then
Text1.Tag = 0
End If
End If
End Sub

Private Sub Text1_LostFocus()
If Text1.Text <> "" And (Val(Text1.Text) <> 0) Then
Text1.Text = Format$(Text1.Text, "###,###.##")
If Left(Text1.Text, 1) = "," Then Text1.Text = "0" & Text1.Text
If Right(Text1.Text, 1) = "," Then
Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
Text1.Tag = 0
Else
If Mid(Text1.Text, (Len(Text1.Text) - 1), 1) = "," Then
Text1.Text = Text1.Text & "0"
End If
End If
End If
End Sub
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:Validar Decimales en un TextBox. Help

Publicado por Alex (1 intervención) el 31/10/2009 13:13:05
Es muy bueno me funciono muy bien sigue asi gracias
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:Validar Decimales en un TextBox. Help

Publicado por vic (1 intervención) el 31/05/2010 17:18:18
Validar Decimales enteros en visual basic
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:Validar Decimales en un TextBox. Help

Publicado por Niko (1 intervención) el 04/08/2008 18:28:56
El codigo que escribiste esta muy bien, pero otra opcion que podrias implementar seria cargar un vector numerico y agregarle las comas y lo que desees y validar que lo que halla dentro del text no sea diferente a lo que hay el el vector, (las comas estarian ahi asi que no tendrias provlemas) evaluas por cada caracter que se ingresa....
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