Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ingresar en cuadro de texto solo numeros y signos

Estas en el tema de Ingresar en cuadro de texto solo numeros y signos en el foro de Visual Basic clásico en Foros del Web. Hola a todos. Como puedo hacer para que en un cuadro de texto solo se pueda ingresar números, el signo + ó - ( el ...
  #1 (permalink)  
Antiguo 06/05/2008, 08:00
 
Fecha de Ingreso: agosto-2007
Mensajes: 17
Antigüedad: 16 años, 8 meses
Puntos: 0
Ingresar en cuadro de texto solo numeros y signos

Hola a todos.
Como puedo hacer para que en un cuadro de texto solo se pueda ingresar números, el signo + ó - ( el signo es obligatorio tenerlo, aunque sea +) y dos decimales que solo pueden ser ,00 ,25 ,50 ,75 y que pueda hacer operaciones de suma y resta con dos cuadros de texto como estos.
Me estoy rompiendo la cabeza pero no soy capaz de hacerlo.
P.e. que pueda poner +3,50 pero que no me permita poner 3,50 ó +3,55 ó 3,0 y así sucesivamente.
Les agradezco de antemano la ayuda porque estoy totalmente bloqueado en este punto.
Un saludo.
  #2 (permalink)  
Antiguo 06/05/2008, 08:35
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Re: Ingresar en cuadro de texto solo numeros y signos

Coloca este código en el evento KeyPress del TextBox:
Código:
 
Dim Selected As Integer
If InStr("0123456789", Chr(KeyAscii)) = 0 Then
    If InStr("+-", Chr(KeyAscii)) <> 0 Then
        If Len(Text1) = 0 Then
            Text1 = Chr(KeyAscii)
        Else
            Dim Text As String
            Text = Text1
            Mid(Text, 1, 1) = Chr(KeyAscii)
            Text1 = Text
        End If
    End If
    If KeyAscii <> 8 Then KeyAscii = 0
Else
    If Len(Text1) > 0 Then
        Selected = Text1.SelStart
        Text1.Tag = Text1.Text
        Text1.Text = Left(Text1, Text1.SelStart) & Chr(KeyAscii) & Right(Text1, Len(Text1) - Text1.SelStart)
        Text1.Text = Left(Text1, 1) & Format(Right(Text1, Len(Text1) - 1), "#.00")
        If Right(Text1, 2) <> "00" And Right(Text1, 2) <> "25" And Right(Text1, 2) <> "50" And Right(Text1, 2) <> "75" Then
            Text1.Text = Text1.Tag
            Text1.SelStart = Selected
        Else
            Text1.SelStart = Selected + 1
        End If
    End If
    KeyAscii = 0
End If
Espero que te funcione...
Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 06/05/2008 a las 08:43 Razón: Agregar código
  #3 (permalink)  
Antiguo 09/05/2008, 01:50
 
Fecha de Ingreso: agosto-2007
Mensajes: 17
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Ingresar en cuadro de texto solo numeros y signos

Gracias por tu respuesta Davis el Grande.
Pero no sale muy bien.
Si pones el signo "+", el cursor se queda a la izquierda y luego el "+".
Si avanzas el curso después del signo e introduces el 2, se pone de la siguiente forma "+2,00" y ya no te deja introducir los decimales.
A partir del código que me has escrito he intentado modificarlo pero sin éxito.
Necesito que me sigas ayudando.
Muchas gracias por tu esfuerzo.
  #4 (permalink)  
Antiguo 09/05/2008, 03:26
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 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.
  #5 (permalink)  
Antiguo 09/05/2008, 05:45
 
Fecha de Ingreso: agosto-2007
Mensajes: 17
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Ingresar en cuadro de texto solo numeros y signos

Gracias Avellaneda por tu respuesta, pero la primera parte del código, con qué evento lo pongo?
Muchas gracias.
  #6 (permalink)  
Antiguo 09/05/2008, 07:31
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Ingresar en cuadro de texto solo numeros y signos

La primera parte es una función que la llamas desde el evento (como dije) KeyPress del TextBox.

Un saludo..
  #7 (permalink)  
Antiguo 09/05/2008, 08:38
 
Fecha de Ingreso: agosto-2007
Mensajes: 17
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Ingresar en cuadro de texto solo numeros y signos

Genial Avellaneda muchas gracias, está casi casi.
Perdona que te siga molestando pero un pequeño detalle, cuando introduzco la cifra, no puedo borrarlo por si me equivoco.
Está genial muchísimas gracias.
  #8 (permalink)  
Antiguo 09/05/2008, 10:01
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Re: Ingresar en cuadro de texto solo numeros y signos

Cita:
Iniciado por edrec Ver Mensaje
Genial Avellaneda muchas gracias, está casi casi.
Perdona que te siga molestando pero un pequeño detalle, cuando introduzco la cifra, no puedo borrarlo por si me equivoco.
Está genial muchísimas gracias.
Muy buen código, Avellaneda.
Sí se puede borrar, con Chr(8): Tecla Retroceso...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:25.