Programación General > Visual Basic 6.0 e inferiores

 Solo Numeros En Textbox

(1/2) > >>

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, &#34;1234567890&#34;, 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(&#34;.&#34;) Then        validarNumeros = KeyAscii    Else        validarNumeros = 0    End IfEnd Function Public Function validarNumerosEnteros(KeyAscii As Integer)    If KeyAscii &#60;&#62; Asc(&#34;.&#34;) Then _        validarNumerosEnteros = validarNumeros(KeyAscii)End Function 'Te dice si un parametro es un numeroPublic Function EsNumero(num As String) As Boolean    If Trim(num) &#60;&#62; &#34;&#34; 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&#036;(KeyAscii))    'Cambiando strValidChar se puede usar para filtrar    'cualquier conjunto de caracteres    strValidChars = &#34;0123456789.,&#34;    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 = &#34;+ Convención +&#34;        MsgBox &#34;Escriba solo números, puntos o comas.&#34;, 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 = &#34;0123456789,&#34; & 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(&#34;1234567890&#34; + 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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa