
09/05/2008, 03:26
|
Colaborador | | Fecha de Ingreso: enero-2008 Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 17 años, 2 meses Puntos: 37 | |
Re: Ingresar en cuadro de texto solo numeros y signos Hola, prueba con una función así:
Código:
Function VerificaNum(ByVal Texto As String, Tecla As Integer) As Integer
Dim iValor As Integer, iLen As Integer
iValor = Tecla ' valor Keyascii que devolverá la función
iLen = Len(Texto) ' longitud del texto según se escribe
' el primer carácter sólo puede ser "+" 0 "-"
If iLen = 0 And (Chr(Tecla) <> "+" And Chr(Tecla) <> "-") Then
VerificaNum = 0
Exit Function
End If
' sólo permitimos números, punto, coma 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) = "-" Or Chr(Tecla) = "+" Then
If InStr(2, "-", Texto) > 0 Or InStr(2, "+", Texto) > 0 Then iValor = Tecla
End If
' si la tecla pulsada es la coma, la convertimos a punto ya que al hacer
' los cálculos, la función Val() sólo reconoce el punto como separador decimal
If iValor = 44 Or iValor = 46 Then
iValor = 46
' si ya se ha escrito un separador decimal, no se permite otro
If (InStr(Texto, ".") > 0 Or InStr(Texto, ",") > 0) Then iValor = 0
End If
If InStr(Texto, ".") > 0 Then
' tenemos el separador decimal, comprobar si es el primer o segundo dígito
iLen = Len(Mid(Texto, InStr(Texto, "."), Len(Texto)))
If iLen = 1 And InStr("0257" & Chr(8), Chr(iValor)) > 0 Then
' para el primer decimal sólo 0, 2, 5 y 7
iValor = Tecla
ElseIf iLen = 2 And InStr("05" & Chr(8), Chr(iValor)) > 0 Then
' para el segundo sólo 0 y 5
iValor = Tecla
Else
' no permite más de dos decimales
iValor = 0
End If
End If
VerificaNum = iValor
End Function
La llamas desde el evento KeyPress pasándole como parámetros el texto excrito y la tecla pulsada
Código:
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = VerificaNum(Text1.Text, KeyAscii)
End Sub
Nota: No la he probado a fondo, pero creo que contempla todas las casuísticas que indicas.
Un saludo. |