Programación General > Visual Basic 6.0 e inferiores
Solo Numeros En Textbox
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.
mamex:
Tu codigo debe ir así:
--- Código: Text --- Private Sub Text1_KeyPress(KeyAscii As Integer) Dim numeros As String Dim v As Integer numeros = Chr(KeyAscii) v = InStr(1, "1234567890", numeros) If v = 0 Then KeyAscii = 0 End IfEnd Sub
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 --- Public Function validarNumeros(KeyAscii As Integer) As Integer If EsNumero(Chr(KeyAscii)) Or KeyAscii = 8 Or KeyAscii = Asc(".") Then validarNumeros = KeyAscii Else validarNumeros = 0 End IfEnd Function Public Function validarNumerosEnteros(KeyAscii As Integer) If KeyAscii <> Asc(".") Then _ validarNumerosEnteros = validarNumeros(KeyAscii)End Function 'Te dice si un parametro es un numeroPublic Function EsNumero(num As String) As Boolean If Trim(num) <> "" Then If IsNumeric(num) Or Asc(num) = 8 Then EsNumero = True End IfEnd Function
Y para ocupar éstas funciones tienes k poner el siguiente codigo en el evento keypress del text
--- Código: Text --- Private Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = validarNumerosEnteros(KeyAscii) 'Si kieres poder meter numeros decimales 'KeyAscii = validarNumeros(KeyAscii)End Sub
cpmario:
Yo uso una rutina parecida a esta:
--- Código: Text ---Private Sub Text1_KeyPress(KeyAscii As Integer) Dim strValidChars As String Dim strTitle As String Dim strCharLetter As String strCharLetter = UCase(Chr$(KeyAscii)) 'Cambiando strValidChar se puede usar para filtrar 'cualquier conjunto de caracteres strValidChars = "0123456789.," If InStr(strValidChars, strCharLetter) Then KeyAscii = Asc(strCharLetter) ElseIf KeyAscii = 8 Or KeyAscii = 13 Then Else 'Opcional, si deseas darle un aviso al usuario 'Lo puedes eliminar strTitle = "+ Convención +" MsgBox "Escriba solo números, puntos o comas.", vbInformation, strTitle KeyAscii = 0 End IfEnd Sub :comp:
Epa:
--- Código: Text --- Private Sub Text1_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 IfEnd Sub
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.
F_Tanori:
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 --- Private Sub Text1_KeyPress(KeyAscii As Integer) numeros = Chr(KeyAscii) If InStr("1234567890" + vbBack, numeros) = 0 Then KeyAscii = 0 End IfEnd Sub
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
--- Fin de la cita ---
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
Navegación
[#] Página Siguiente
Ir a la versión completa