Inactividad del teclado

05/10/2004 - 14:44 por raul | Informe spam
Hola

Estoy haciendo un programa que tiene que rellenar un formulario, y
quisiera hacer que cuando el usuario este mas de 1 minuto sin pulsar una
tecla, cierre el formulario.

¿Cual sería la mejor forma de controlar la inactividad?.

Gracias

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
05/10/2004 - 15:32 | Informe spam
Raul,

Se me ocurre:
- Pon en el form un objeto Timer. Prográmalo para que al cabo de 1 min
cierre el form.
- Asigna True a la propiedad KeyPreview del form. Así los mensajes de
teclado pararán primero por el form antes de ir a los controles.
- En el evento KeyPress del form (cuando se pulse una tecla) asigna false a
la prop Enabled del Timer y luego true. Así volverá a empezar a contar desde
cero...

Slds - Octavio

"raul" escribió en el mensaje
news:
Hola

Estoy haciendo un programa que tiene que rellenar un formulario, y
quisiera hacer que cuando el usuario este mas de 1 minuto sin pulsar una
tecla, cierre el formulario.

¿Cual sería la mejor forma de controlar la inactividad?.

Gracias


Respuesta Responder a este mensaje
#2 raul
05/10/2004 - 17:32 | Informe spam
Gracias, lo probaré ahora
"raul" escribió en el mensaje
news:
Hola

Estoy haciendo un programa que tiene que rellenar un formulario, y
quisiera hacer que cuando el usuario este mas de 1 minuto sin pulsar una
tecla, cierre el formulario.

¿Cual sería la mejor forma de controlar la inactividad?.

Gracias

Respuesta Responder a este mensaje
#3 raul
05/10/2004 - 18:36 | Informe spam
Hola

He probado lo que comentabas, y no me ha funcionado. El problema es que
tengo que activar el objeto Timer dentro de un hilo, y por lo que veo no
funciona, debe ser dentro del mismo proceso. ¿Como se puede soluccionar
esto?.

El programa lanza un formulario, y lanzo un hilo que esta escuchando un
socket, cuando recibe una respuesta a traves del socket, quisiera activar el
objeto Timer, y si en diez segundo no tengo respuesta del usuario, que
cierre el formulario. El problema que veo es no se puede activar el timer
dentro de un hilo.
"raul" escribió en el mensaje
news:
Hola

Estoy haciendo un programa que tiene que rellenar un formulario, y
quisiera hacer que cuando el usuario este mas de 1 minuto sin pulsar una
tecla, cierre el formulario.

¿Cual sería la mejor forma de controlar la inactividad?.

Gracias

Respuesta Responder a este mensaje
#4 A.Poblacion
05/10/2004 - 19:33 | Informe spam
En lugar del System.Windows.Forms.Timer puedes usar un
System.Threading.Timer, que sí que se puede lanzar desde un hilo separado.

Si a pesar de todo quieres usar el System.Windows.Forms.Timer, la solución
consiste en que desde el hilo del socket llames al BeginInvoke del
formulario pasándole un delegado que apunte a una rutina que active el
timer. Esto consigue que la activación del Timer se realice desde el mismo
hilo del formulario y que no te dé error.


"raul" wrote in message
news:OK%
[...] El problema es que
tengo que activar el objeto Timer dentro de un hilo, y por lo que veo no
funciona, debe ser dentro del mismo proceso. ¿Como se puede soluccionar
esto?.

El programa lanza un formulario, y lanzo un hilo que esta escuchando


un
socket, cuando recibe una respuesta a traves del socket, quisiera activar


el
objeto Timer, y si en diez segundo no tengo respuesta del usuario, que
cierre el formulario. El problema que veo es no se puede activar el timer
dentro de un hilo.
[...]
Respuesta Responder a este mensaje
#5 Braulio Diez
06/10/2004 - 10:33 | Informe spam
Hola !

La primera parte creo que la tienes bastante
controlada: Pones en tu formulario la propiedad
KeyPreview a true, y te suscribes al evento On KeyDown,
te creas una variable miembro que se llame m_UltimoUso, y
en cada OnKeyDown la actualizas a la fecha/hora actual (
eso si para actualizar le añades un bloqueo para evitar
que otra hebra pueda leer a la vez que se está
modificando):

protected Object m_objBloqueo =
new Object();
protected DateTime m_UltimoUso =
DateTime.Now;


private void Form1_KeyDown(object sender,
System.Windows.Forms.KeyEventArgs e)
{
lock( m_objBloqueo)

{
m_UltimoUso =
DateTime.Now;
}
}


Ahora viene el "turrón" del asunto, te creas una hebra
que funcione en paralelo y que chequee cada 40 segundos (
le puedes meter un Sleep y que se duerma 40 segundos) la
variable m_UltimoUso, si resulta que ha pasado mas de un
minuto, le enviamos un mensaje al formulario para que se
cierre.

Dime si es suficiente con la informacion que te ha
pasado, Buena suerte
Braulio



Hola

Estoy haciendo un programa que tiene que rellenar un


formulario, y
quisiera hacer que cuando el usuario este mas de 1


minuto sin pulsar una
tecla, cierre el formulario.

¿Cual sería la mejor forma de controlar la inactividad?.

Gracias


.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida