Programación General > Visual Basic 6.0 e inferiores
Problema Textbox (solo Numeros, Solo Letras)
zaida20:
Hola a todos, tengo el siguiente problema.
Estoy utilizando Gambas (Linux) y necesito que un textbox sólo me permita introducir números y comas y otro TexBox sólo me permita intruducir letras. He estado buscando información y he probado varios códigos, pero ninguno me funciona:
--- Código: Text ---PUBLIC SUB TexBox1_KeyPress(KeyAscii AS Integer)IF KeyAscii <> 8 THEN IF (KeyAscii < 48) OR (KeyAscii > 57) THEN KeyAscii = 0 ENDIFENDIFEND
--- Código: Text ---PUBLIC SUB TexBox1_KeyPress()IF Key.Code <> 8 THEN IF (Key.Code < 48) OR (Key.Code > 57) THEN Key.Code = 0 ENDIFENDIFEND
--- Código: Text ---PUBLIC SUB TexBox1_KeyPress()IF NOT IsNumber(TextBox1.Text) THENmessage.Info("Ingrese solo numeros")ENDIFEND ¿Podeis ayudarme?
Saludos y gracias :hola:
cpmario:
En VB6 uso esta rutina
--- 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
Puedes cambiar la línea
--- Código: Text --- strValidChars = "0123456789.," Por cualquier cadena de texto que desees validar por ejemplo:
--- Código: Text --- strValidChars = "SCVDUscvdu" Para validar el estado civil de una persona, Soltero, Casado, Viudo, etc.
:comp:
Nebire:
Es más cómod usar la función 'IsNumeric'. Esta función eválua una expresión y devuelve un valor buleano que indica si se puede tomar como número.
entonces un código podría ser algo así como:
--- Código: Text --- static textoAnterior as boolean if IsNumeric(textBox1.text) then '... acciones que deseamos hacer textoAntiguo=textbox1.text else textbox1.text=textoAnterior end fi
La parte de 'else' no determina que sean sólo texto sólo que la expresión no puede valorarse como numérica, sin embargo puede aprovecharse para no repetir código añadiendo más cófigo y diferenciando la validación de cuando se pide valorar sólo números o sólo letras.
En tonces el código enterior embebido en una función sería algo como:
--- Código: Text --- public function evaluar_TextoComo(modo as boolean, texto as string) as boolean dim resultado as boolean if IsNumeric(texto) then resultado=true else for k=0 to 9 If InStr(1, texto, cstr(k))<>0 Then exit function end if next resultado=true ' si no salió al llegar aquí, no se encontró números, es ok. end if evaluar_TextoComo=resultado and modo end function
En vb ila función 'IsStr' permite buscar una cadena dentro de otra, si se existe devuelve la posición donde empieza la coincidencia, por ellos usa 3 parámetros, el primero es para indicarle la posición del carácter desde el que queremos iniciar la búsqueda, los otros son la cadena donde buscar y la cadena que se busca...
Nuestro amigo cpMario ha cometido un pequeño lapsus, ya que si le pasamos la cadena "0123456789" como cadena a buscar intentará encontrar ese texto exacto y no cualquiera de los caracteres que contiene, por ello es necesario usar un bucle o intentar otra función más compleja...
No sé en 'gambas' pero visual Basic, hay que tener a veces cuidado con los puntos y las comas, ya que en español se usan de modo inverso al inglés y determinadas funciones pueden 'comportarse' de un modo no esperado. Si es el caso, conviene añadir código para controlarlo...
Ignoro si en 'gambas' la función IsNumber' que utilizas determina sólo si es un valor numérico o si se puede interpretar como tal, si es el primer caso, puedes implementar la función 'IsNumeric' con una sencilla función como la siguiente:
--- Código: Text --- public function IsNumeric(texto as string) as boolean dim v as double on error goto noNumerable v= texto /2 isNumeric=true exit function noNumerable: 'sale con valor false if val(texto)<>0 then IsNumeric=true end function
El mecanismo de esta función se basa en que si no no se puede cuantificar como número se origina un error . hay 3 casos posibles: todo el texto sean números: ejmplo: "3456734", en los demás casos dará error, pero todavía se acptarán como válidos aquellos que empiecen por números.
esto: "3456123" devolcerá true
esto: "dfjghd999" devolverá false
esto: "3456asjfht" devolverá true
esto: "0" devolverá true
zaida20:
Muchas gracias por contestar, al final he conseguido solucionarlo asi:
--- Código: Text ---'''''Solo numeros enteros******************PUBLIC SUB TextBox3_Change() CInt(textbox3.Text)'Convierte el numero en entero CATCH textbox3.Text = Mid$(textbox3.Text, 1, -1)'Si no es un numero borra el caracter STOP EVENT END 'Formato numero decimal ******************************************************PUBLIC SUB TextBox4_Change() CFloat(textbox4.Text) CATCH textbox4.Text = Mid$(textbox4.Text, 1, -1) STOP EVENT END 'Solo letras*********************PUBLIC SUB TextBox5_KeyPress() IF Key.Code <> 8 THEN IF (Key.Code < 65) OR (Key.Code >90 ) THEN STOP EVENT ENDIF END IF END
Saludos :hola:
cpmario:
Te agradezco nos ilustres en GAMBAS
Esto va para Nebire
Me disculpas pero el lapsus lo has cometido tu.
Ya que
--- Código: Text ---If InStr(strValidChars, strCharLetter) Then Hace el trabajo de localizar cualquiera de los caracteres anotados en la cadena.
Esa rutina es la que uso para detectar cualquier conjunto de caracteres que deseo filtrar.
En todo caso lo que tienes que hacer es colocar la rutina en el evento de un TextBox y ver si funciona
:comp:
Navegación
[#] Página Siguiente
Ir a la versión completa