• Lunes 23 de Diciembre de 2024, 08:25

Autor Tema:  Solo Numeros En Textbox  (Leído 9654 veces)

abelsql3000

  • Miembro activo
  • **
  • Mensajes: 76
    • Ver Perfil
Solo Numeros En Textbox
« en: Sábado 3 de Febrero de 2007, 19:16 »
0
Ya estoy algo oxidado en vb. He programado antes, pero como lo he dejado ud comprenderan.
Estoy haciendo esta linea de codigo donde intendto restringir el cuadro de texto a solo numeros.
Como veran uso el evento keypress
y la funcion INSTR
Este es el  codigo
Private Sub Text1_KeyPress(KeyAscii As Integer)
numeros = Chr(KeyAscii)
Print n
If InStr(n, "1234567890") <> 0 Then
KeyAscii = 0
End If
End Sub

En que me estoy equivocando amigos programadores
De ante mano les agradesco su aporte. atte Abel.

mamex

  • Miembro activo
  • **
  • Mensajes: 77
  • Nacionalidad: mx
    • Ver Perfil
Re: Solo Numeros En Textbox
« Respuesta #1 en: Sábado 3 de Febrero de 2007, 19:53 »
0
Tu codigo debe ir así:
Código: Text
  1.  
  2. Private Sub Text1_KeyPress(KeyAscii As Integer)
  3.     Dim numeros As String
  4.     Dim v As Integer
  5.     numeros = Chr(KeyAscii)
  6.     v = InStr(1, &#34;1234567890&#34;, numeros)
  7.     If v = 0 Then
  8.         KeyAscii = 0
  9.     End If
  10. End Sub
  11.  
  12.  


Pero bueno te recomiendo usar estas funciones que yo diseñé, ya que el codigo anterior no te permite usar numeros fraccionaros (con punto decimal), ni la teclas de backspace

Código: Text
  1.  
  2. Public Function validarNumeros(KeyAscii As Integer) As Integer
  3.     If EsNumero(Chr(KeyAscii)) Or KeyAscii = 8 Or KeyAscii = Asc(&#34;.&#34;) Then
  4.         validarNumeros = KeyAscii
  5.     Else
  6.         validarNumeros = 0
  7.     End If
  8. End Function
  9.  
  10. Public Function validarNumerosEnteros(KeyAscii As Integer)
  11.     If KeyAscii &#60;&#62; Asc(&#34;.&#34;) Then _
  12.         validarNumerosEnteros = validarNumeros(KeyAscii)
  13. End Function
  14.  
  15. 'Te dice si un parametro es un numero
  16. Public Function EsNumero(num As String) As Boolean
  17.     If Trim(num) &#60;&#62; &#34;&#34; Then
  18.         If IsNumeric(num) Or Asc(num) = 8 Then EsNumero = True
  19.     End If
  20. End Function
  21.  
  22.  

Y para ocupar éstas funciones tienes k poner el siguiente codigo en el evento keypress del text
Código: Text
  1.  
  2. Private Sub Text1_KeyPress(KeyAscii As Integer)
  3.     KeyAscii = validarNumerosEnteros(KeyAscii)
  4.     'Si kieres poder meter numeros decimales
  5.     'KeyAscii = validarNumeros(KeyAscii)
  6. End Sub
  7.  
  8.  

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Solo Numeros En Textbox
« Respuesta #2 en: Sábado 3 de Febrero de 2007, 23:22 »
0
Yo uso una rutina parecida a esta:

Código: Text
  1. Private Sub Text1_KeyPress(KeyAscii As Integer)
  2.     Dim strValidChars As String
  3.     Dim strTitle As String
  4.     Dim strCharLetter As String
  5.     strCharLetter = UCase(Chr&#036;(KeyAscii))
  6.     'Cambiando strValidChar se puede usar para filtrar
  7.     'cualquier conjunto de caracteres
  8.     strValidChars = &#34;0123456789.,&#34;
  9.     If InStr(strValidChars, strCharLetter) Then
  10.         KeyAscii = Asc(strCharLetter)
  11.     ElseIf KeyAscii = 8 Or KeyAscii = 13 Then
  12.     Else
  13.         'Opcional, si deseas darle un aviso al usuario
  14.         'Lo puedes eliminar
  15.         strTitle = &#34;+ Convención +&#34;
  16.         MsgBox &#34;Escriba solo números, puntos o comas.&#34;, vbInformation, strTitle
  17.         KeyAscii = 0
  18.     End If
  19. End Sub
  20.  
:comp:

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Solo Numeros En Textbox
« Respuesta #3 en: Domingo 4 de Febrero de 2007, 01:04 »
0
Código: Text
  1.  
  2. Private Sub Text1_KeyPress(KeyAscii As Integer)
  3.   Dim numeros As String * 12
  4.   Dim num As String
  5.   Dim v As Integer
  6.  
  7.   numeros = &#34;0123456789,&#34; & vbBack
  8.  
  9.   num = Chr(KeyAscii)
  10.   v = InStr(1, numeros, num)
  11.   If v = 0 Then
  12.       KeyAscii = 0
  13.   End If
  14. End Sub
  15.  
  16.  

Asi acepta coma y retroceso, el unico problema es que se pueden agregar letras pegando texto con el menu contextual.

Saludos

Habian 2 errorcitos en el codigo  :P  ahi ya funciona bien.
The sweet smell of a great sorrow lies over the land.


F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Solo Numeros En Textbox
« Respuesta #4 en: Domingo 4 de Febrero de 2007, 13:52 »
0
Primero Abel y como bien lo coloca mamex

el codigo que tu colocas tienes al reves los parametros de la funcion inStr,a demas le estas enviando un paramertro vacio (n cuando es numeros)


y la comparacion esta alreves  Instr<>0 cuando debe de ser InStr=0

Código: Text
  1.  
  2. Private Sub Text1_KeyPress(KeyAscii As Integer)
  3.     numeros = Chr(KeyAscii)
  4.     If InStr(&#34;1234567890&#34; + vbBack, numeros) = 0 Then
  5.         KeyAscii = 0
  6.     End If
  7. End Sub
  8.  

Suerte

Aqui hay varios Aportes sobre el tema
http://foros.solocodigo.com/index.php?showtopic=26477


Cita de: "Epa"

Asi acepta coma y retroceso, el unico problema es que se pueden agregar letras pegando texto, con ctrl + v o con el menu contextual.

Saludos


Yo hago esto :P y me funciona habra que agregarle lo de las comas y los puntos ( ya vendra en  Service Pack :P)

http://foros.solocodigo.com/index.php?show...indpost&p=86265


Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

supermancito

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Solo Numeros En Textbox
« Respuesta #5 en: Jueves 8 de Febrero de 2007, 23:30 »
0
Citar
Private Sub Text1_KeyPress(KeyAscii As Integer)
numeros = Chr(KeyAscii)
Print n
If InStr(n, "1234567890") <> 0 Then
KeyAscii = 0
End If
End Sub

mira amigo a mi parecer no creo que tengas que usar ese codigo yo uso uno diferente que me permite ingresar solo numeros y a las ves me deja usar decimales y  usar la tecla enter para poder entrar aver si lo tomas en cuenta  SUERTEEEEEEEEEEEEEE

YO USO ESTE CODIGO:
Citar
Private Sub telf_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57:
Case 32:
Case Else:
MsgBox ("error solo numeros")
End Select
End Sub


:hola:  :hola:  :hola:  :hola:  :hola:  :hola:  :hola:  :hola:  :hola:  :hola: [/color]
C:\Documents and Settings\Administrador\Mis documentos

ldvgsmca

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Solo Numeros En Textbox
« Respuesta #6 en: Viernes 9 de Febrero de 2007, 06:37 »
0
Cita de: "abelsql3000"
Ya estoy algo oxidado en vb. He programado antes, pero como lo he dejado ud comprenderan.
Estoy haciendo esta linea de codigo donde intendto restringir el cuadro de texto a solo numeros.
Como veran uso el evento keypress
y la funcion INSTR
Este es el  codigo
Private Sub Text1_KeyPress(KeyAscii As Integer)
numeros = Chr(KeyAscii)
Print n
If InStr(n, "1234567890") <> 0 Then
KeyAscii = 0
End If
End Sub

En que me estoy equivocando amigos programadores
De ante mano les agradesco su aporte. atte Abel.
bueno amigo te envio un excelente ejemplo que he desarrollado para controlar los datos suministrador por en usuario.


esta funcion controla hasta la coma y el punto en los formato de los numero
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

gbetancourt

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Solo Numeros En Textbox
« Respuesta #7 en: Domingo 24 de Agosto de 2008, 05:35 »
0
Estimado tengo el mismo problema que lo solucione con el siguiente codigo:

Private Sub caudal_KeyPress(KeyAscii As Integer)
Dim numeros As String * 12
Dim num As String
Dim v As Integer
 numeros = "0123456789," & vbBack
  num = Chr(KeyAscii)
v = InStr(1, numeros, num)
If v = 0 Then
      KeyAscii = 0
End If
End Sub

pero me da un error cuando borro el ultimo digito, o el primero que ingrese, con el backspace.
creo q es debido a que asigno el valor engresado en el textbox a una variable de esta manera.


Public CAU As Single

Private Sub CAUDAL_Change()
CAU = CAUDAL.Text
End Sub

espero me puedan ayudar, de antemano gracias....

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Solo Numeros En Textbox
« Respuesta #8 en: Domingo 24 de Agosto de 2008, 15:51 »
0
Me vais a perdonar, pero todos aquellos que estáis usando cadenas de caracteres cuando la función os pasa un entero lo estáis haciendo mal.

Una característica fundamental de un programa es que corra rápido. Y bien es conocido que en Visual Basic las cadenas de caracteres son muy lentas de manejar. Es mejor evitar su uso siempre que sea posible. Y desde luego si ya tenemos un número, manejemos números. En vez de una cadena de caracteres con los caracteres válidos, pues un array de sus códigos ASCII. ¿Para qué llamar a InStr(), que lentifica el proceso, y usar cadenas de caracteres que rellenan memoria inútilmente? En fin, que la mejor manera es usar números, que para eso están hechos los computadores, y encima el parámetro pasado por el evento es un Integer. ¿Por qué será?  ;)