Visual Basic - Validar ingreso de un real

Life is soft - evento anual de software empresarial
 
Vista:

Validar ingreso de un real

Publicado por edu (4 intervenciones) el 28/01/2009 23:25:35
Buenas tardes, mi consulta es la siguiente:
Tengo 2 cajas de texto que deben recibir 1 numero real cada una, de tal forma que sólo permitan el ingreso de los dígitos del 0 al 9 además del -(menos) y el punto, pero estos últimos solo deben permitirse ingresar una sola vez en cada caja además el -(menos) únicamente podría ingresarse al inicio de la entrada. He tomado como parte de mi código la función soloNumeros() que postearon hace unos días pero quisiera añadirle las lineas necesarias para que me permita llevar a cabo este caso. Lo he conseguido codificando el evento KeyPress de cada TextBox pero me doy cuenta que hay codigo duplicado que pienso podría ir dentro de la función.

Private Sub txtBase_KeyPress(keyAscii As Integer)
If (keyAscii = 13) Then
txtExponente.SetFocus
keyAscii = 0 'evita que suene el beep
Else
If (keyAscii <> 45) Then
If (keyAscii <> 46) Then
keyAscii = soloNumeros(keyAscii)
Else
If (InStr(txtBase.Text, ".") <> 0) Then
keyAscii = 0
End If
End If
Else
If (txtBase.Text <> "") Then
keyAscii = 0
End If
End If
End If

End Sub

Private Sub txtExponente_KeyPress(keyAscii As Integer)
If (keyAscii = 13) Then
If (cmdCalcular.Enabled) Then
cmdCalcular.SetFocus
keyAscii = 0 'evita que suene el beep
End If
Else
If (keyAscii <> 45) Then
If (keyAscii <> 46) Then
keyAscii = soloNumeros(keyAscii)
Else
If (InStr(txtExponente.Text, ".") <> 0) Then
keyAscii = 0
End If
End If
Else
If (txtExponente.Text <> "") Then
keyAscii = 0
End If
End If
End If

End Sub

en un módulo la función:
Function soloNumeros(ByVal tecla As Integer) As Integer
Dim iValor As Integer

iValor = tecla

If (InStr("0123456789" & Chr(8), Chr(iValor)) = 0) Then
iValor = 0
End If

soloNumeros2 = iValor

End Function
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:Validar ingreso de un real

Publicado por P3L30N2009 (699 intervenciones) el 29/01/2009 09:38:17
Mira, aquí tienes la función modificada a tus necesidades

Public Function VerificaNum(ByVal Texto As String, Tecla As Integer)
Dim iValor As Integer
iValor = Tecla
' sólo permite números, punto y retroceso
If InStr("0123456789." & Chr(8), Chr(iValor)) = 0 Then iValor = 0
' comprueba que el signo menos esté sólo al principio
If Chr(Tecla) = "-" Then
If InStr(2, "-", Texto) > 0 Then iValor = Tecla
End If
' si ya se ha escrito un separador decimal, no se permite otro
If iValor = 46 Then
If (InStr(Texto, ".") > 0 Or InStr(Texto, ",") > 0) Then iValor = 0
End If
VerificaNum = iValor
End Function

En el evento KeyPress de cada TextBox:

KeyAscii = VerificaNum(TextX.Text, KeyAscii)

Si la función la colocas en un módulo .bas, te recuerdo que la tienes que declarar como Public para que esté disponible en todo el proyecto.
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

Solo un comentario

Publicado por Lolazo (5 intervenciones) el 29/01/2009 17:01:32
Peleon, sin ánimo de hacer polémica, esto último que escribes:

"Si la función la colocas en un módulo .bas, te recuerdo que la tienes que declarar como Public para que esté disponible en todo el proyecto"

no es necesario. Si declaras una función o procedimiento en un módulo .BAS automáticamente se reconoce como público, está disponible para todo el proyecto.
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

Buena aclaración!

Publicado por P3L30N2009 (699 intervenciones) el 29/01/2009 17:25:46
Lapsus por mi parte, no sé si estaría pensando en variables en vez de en funciones.
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

Gracias

Publicado por edu (4 intervenciones) el 29/01/2009 23:04:36
Muy agradecido de ustedes señores.
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