https://foro.gambas-es.org/viewtopic.php?f=1&t=63
-----------------------------------
CanihoJR
Miercoles, 23 Septiembre 2009, 22:26

Evitar Letras En Textbox
-----------------------------------
Buenas! realmente nose si es el metodo correcto, ni la forma de la q deberia hacerse, pero me funciona y de lujo :D

[code linenumbers=false]PUBLIC SUB Ttelefono_Change()
  CInt(Ttelefono.Text) 'Convierte el numero en entero
  CATCH
  Ttelefono.Text = Mid$(Ttelefono.Text, 1, -1) 'Si no es un numero borra el caracter
  STOP EVENT
END[/code]

De este sencillo metodo consigo que en mi [i]textbox[/i] llamado Ttelefono no pueda escribir una letra, para en parte, asegurarme deq almenos se parezca a un numero de telefono :P spero q os sirva de ayuda ;)


-----------------------------------
soplo
Miercoles, 23 Septiembre 2009, 23:04

Re: Evitar Letras En Textbox
-----------------------------------
Hola
El evento change se ejecuta cuando tu control ya ha cambiado su contenido y ahora tienes que trabajar para quitarlo si no es adecuado.

Parece mas apropiado el evento keypress que se ejecuta cuando pulsas una tecla.

Pongamos que tu solo quieras números
[code linenumbers=false]sub textbox_keypress()
if isdigit(key.text) then ---> es numérico
...
endif[/code]

[url=http://gambasdoc.org/help/cat/char?es]http://gambasdoc.org/help/cat/char?es

Si quieres anular la tecla puedes anular el evento (stop event) en cuyo caso no llega nada al control.

¡ojo! el keypress salta al pulsar una tecla (el keyrelease al soltarla). Ten cuidado con las pulsaciones que eliminas porque podrías impedir borrar un número mal puesto por ejemplo. Para evitar problemas de gui y ascii utiliza las constantes que corresponden a cada tecla en la clase key y así te funcionará bien.


-----------------------------------
CanihoJR
Jueves, 24 Septiembre 2009, 13:55

Re: Evitar Letras En Textbox
-----------------------------------
si, veo q tu metodo es mas optimizado, en cualquier caso, ambos funcionan :P, cambiaré al tuyo en la siguiente compilacion que haga, para optimizar el tema :P

Grax! :D


-----------------------------------
soplo
Jueves, 24 Septiembre 2009, 14:34

Re: Evitar Letras En Textbox
-----------------------------------
Conceptualmente debemos pensar que el evento keypress como su nombre indica está pensado para detectar pulsaciones de teclas y actuar conforme a eso. Por ello cuando quieres permitir algunas teclas y otras no lo mas lógico es recurrir a él.

El evento change está mas pensado para actuar cuando el contenido cambia. Por ejemplo yo tengo hecho un gridview que muestra el contenido de una tabla. Según vas escribiendo un nombre en un textbox en el gridview se van filtrando solo los registros que coinciden con lo escrito. Es decir, cuando el textbox cambia, se realiza una nueva búsqueda y se muestra el resultado

 :mryellow:


-----------------------------------
CanihoJR
Jueves, 24 Septiembre 2009, 20:44

Re: Evitar Letras En Textbox
-----------------------------------
hehehe ahora q lo comentas, podrias poner ese ejemplo? seria la caña, tengo echo un pequeño buscador pero muestra los resultados totales, seria genial q fuese filtrando :D menuda idea! ... desde luego, cuanto mas tele veo, menos imaginacion desarrollo....... :(


-----------------------------------
soplo
Jueves, 24 Septiembre 2009, 22:47

Re: Evitar Letras En Textbox
-----------------------------------
Pues es muy sencillo. 

Imagina un gridview o cualquier otro control que muestra el contenido de una tabla.
Ahora imagina un textbox en el que quieres escribir y que según vayas escribiendo se vaya filtrando. 

Por abreviar pensemos en una conexión activa.

[code linenumbers=false]sub textbox_change
Dim Rs as result

if textbox.text then ---> que haga esto si en el textbox hay algo
   Rs=Cn.exec("select * from tabla where campo like '" & textbox.text & "%' order by lo_que_sea")
else
   Rs=Cn.exec("select * from tabla order by lo_que_sea")
endif

LlenarGrid(Rs) ---> procedimiento que llena el gridview
end sub[/code]

Ese evento tal como está puesto filtra todo aquello que EMPIECE POR lo que has escrito en el textbos. También podemos hacer que en vez de EMPEZAR POR filtre los registros que CONTENGAN lo que has escrito.
[code linenumbers=false]sub textbox_change
Dim Rs as result

if textbox then ---> que haga esto si en el textbox hay algo
   Rs=Cn.exec("select * from tabla where campo like '%" & textbox.text & "%' order by lo_que_sea")
else
   Rs=Cn.exec("select * from tabla order by lo_que_sea")
endif

LlenarGrid(Rs) ---> procedimiento que llena el gridview
end sub
[/code]En este caso según tu vas escribiendo algo en el textbos se van filtrando en el gridview los registros cuyo campo contiene lo que has escrito.

En mysql el % es un comodín para varios caracteres. No se cual es en sqlite quizá sea el mismo o no, pero en cualquier caso se entiende lo que digo.

Otra posibilidad que funciona igual es la propiedad filter del datasource por ejemplo.

[b]Otro caso que te propongo[/b]
El caso anterior no es una buena solución cuando hay muchos registros porque tarda en generar el result (es cuestión de probar), pero lo que si es eficiente es en vez de generar result nuevos buscar en una tabla.

Osea que tu tienes un grid con un montón de datos y tienes un textbox y cuando escribes algo te busca y se posiciona en el primer registro que cumple esa condición. Yo suelo poner un botón adicional que es para buscar siguiente y lo que hace es buscar el siguiente registro que cumpla esa misma condición.

 :mryellow:


-----------------------------------
CanihoJR
Jueves, 24 Septiembre 2009, 22:51

Re: Evitar Letras En Textbox
-----------------------------------
ahahhaha llevaba desde q te contesté probando cosillas, pero me petaba lo q hacia  :P gracias x la solucion! :P

sobre el sql si q lo entiendo vengo de php+mysql x eso tengo mas de un problema al seleccionar cosas en tiempo real, no me puse con Ajax :P.

sobre lo q me propones.... voy aver si termino de aclararme en "mostrar datos" q para guardar en mysql no tengo problemas, pero para mostrar.... mas de uno :s


