KeyPreview

24/08/2009 - 13:11 por Isabel | Informe spam
Hola,
Tengo una aplicación MDI. El formulario principal tiene el KeyPreview =
false.
Luego, en uno de los formularios hijos (que tambien tiene el
keyPreview=false) tengo un control de usuario.
Como puedo hacer para que los controles (textBox) que contien el control de
usuario, respondan a los eventos KeyPress, KeyDown, ... ???

He probado todas las combinaciones del KeyPreview en el formulario
principal, en el hijo que contien el usercontrol, pero nada. La ejecución
nunca pasa por los métodos keyPress y KeyDown del control de usuario

Grácias

Preguntas similare

Leer las respuestas

#1 Juan Carlos Paramá
26/08/2009 - 10:35 | Informe spam
Hola,

No importan los KeyPreview de los formularios. Si los activas podrás
capturar los eventos en ambos formularios
pero seguiran lanzandose en los controles.

Si los textbox estan en un control de usuario es en ese control de
usuario donde tienes que capturarlos. No en el
formulario que los contenga. Si necesitas los eventos en el formulario que
contiene tu control tendrás que capturarlos
primero en tu control y después lanzarlos tu desde el control.

Saludos,

Juan Carlos Paramá




"Isabel" escribió en el mensaje de noticias
news:%
Hola,
Tengo una aplicación MDI. El formulario principal tiene el KeyPreview =
false.
Luego, en uno de los formularios hijos (que tambien tiene el
keyPreview=false) tengo un control de usuario.
Como puedo hacer para que los controles (textBox) que contien el control
de usuario, respondan a los eventos KeyPress, KeyDown, ... ???

He probado todas las combinaciones del KeyPreview en el formulario
principal, en el hijo que contien el usercontrol, pero nada. La ejecución
nunca pasa por los métodos keyPress y KeyDown del control de usuario

Grácias


Respuesta Responder a este mensaje
#2 Isabel
27/08/2009 - 14:11 | Informe spam
Hola Juan Carlos,

Es que este es precisamente el problema que tengo.
en el UserControl tengo varios textBox, y tengo (ahora mismo) capturados los
eventos KeyDown, KeyPress y KeyPreviewDown del userControl.
en cada uno de estos tres métodos tengo un punto de interrupción por lo que
veo que nunca pasa el código por aqui. (y estoy en modo debug).

Estoy intentando que cuando se pulse una tecla de función en estos textbox
ocurra algo.
Pero si pulso F2 en uno de estos textbox, lo único que se lanza es el F2
definido en el menú del formulario principal (aplicación MDI)

Grácias.



"Juan Carlos Paramá" escribió en el mensaje
news:
Hola,

No importan los KeyPreview de los formularios. Si los activas podrás
capturar los eventos en ambos formularios
pero seguiran lanzandose en los controles.

Si los textbox estan en un control de usuario es en ese control de
usuario donde tienes que capturarlos. No en el
formulario que los contenga. Si necesitas los eventos en el formulario que
contiene tu control tendrás que capturarlos
primero en tu control y después lanzarlos tu desde el control.

Saludos,

Juan Carlos Paramá




"Isabel" escribió en el mensaje de noticias
news:%
Hola,
Tengo una aplicación MDI. El formulario principal tiene el KeyPreview =
false.
Luego, en uno de los formularios hijos (que tambien tiene el
keyPreview=false) tengo un control de usuario.
Como puedo hacer para que los controles (textBox) que contien el control
de usuario, respondan a los eventos KeyPress, KeyDown, ... ???

He probado todas las combinaciones del KeyPreview en el formulario
principal, en el hijo que contien el usercontrol, pero nada. La ejecución
nunca pasa por los métodos keyPress y KeyDown del control de usuario

Grácias





Respuesta Responder a este mensaje
#3 Juan Carlos Paramá
27/08/2009 - 14:26 | Informe spam
Hola Isabel,

En vez del breakpoint yo pondría un MessageBox. De esa forma te aseguras
de que efectivamente no pasa por ahí. Si es así realmente (no se si el user
control lo tienes en el mismo proyecto, por ejemplo) lo único que se me
ocurre es que después de haber creado el evento por alguna razón se haya
desvinculado el evento del metodo. Comprueba que en la ventana de
propiedades aparece el nombre del metodo (no sería la primera vez que se
borra al realizar una operación de deshacer o accidentalmente por el
usuario).

Saludos,

Juan Carlos Paramá


"Isabel" escribió en el mensaje de noticias
news:uKCPL%
Hola Juan Carlos,

Es que este es precisamente el problema que tengo.
en el UserControl tengo varios textBox, y tengo (ahora mismo) capturados
los eventos KeyDown, KeyPress y KeyPreviewDown del userControl.
en cada uno de estos tres métodos tengo un punto de interrupción por lo
que veo que nunca pasa el código por aqui. (y estoy en modo debug).

Estoy intentando que cuando se pulse una tecla de función en estos textbox
ocurra algo.
Pero si pulso F2 en uno de estos textbox, lo único que se lanza es el F2
definido en el menú del formulario principal (aplicación MDI)

Grácias.



"Juan Carlos Paramá" escribió en el mensaje
news:
Hola,

No importan los KeyPreview de los formularios. Si los activas podrás
capturar los eventos en ambos formularios
pero seguiran lanzandose en los controles.

Si los textbox estan en un control de usuario es en ese control de
usuario donde tienes que capturarlos. No en el
formulario que los contenga. Si necesitas los eventos en el formulario
que contiene tu control tendrás que capturarlos
primero en tu control y después lanzarlos tu desde el control.

Saludos,

Juan Carlos Paramá




"Isabel" escribió en el mensaje de noticias
news:%
Hola,
Tengo una aplicación MDI. El formulario principal tiene el KeyPreview =
false.
Luego, en uno de los formularios hijos (que tambien tiene el
keyPreview=false) tengo un control de usuario.
Como puedo hacer para que los controles (textBox) que contien el control
de usuario, respondan a los eventos KeyPress, KeyDown, ... ???

He probado todas las combinaciones del KeyPreview en el formulario
principal, en el hijo que contien el usercontrol, pero nada. La
ejecución nunca pasa por los métodos keyPress y KeyDown del control de
usuario

Grácias









Respuesta Responder a este mensaje
#4 Sashka
27/08/2009 - 19:43 | Informe spam
Yo creo que el problema es que F2 lo has puesto como shortcut en un
elemento de menú

Prueba esto en el evento del menu que corresponda.


private void menuItem_Click(object sender, System.EventArgs e)
{
if (this.ActiveMdiChild != null)
{
if (this.ActiveMdiChild.ActiveControl !=null &&
this.ActiveMdiChild.ActiveControl is UserControl1)
{
if ((this.ActiveMdiChild.ActiveControl as
UserControl1).ActiveControl is TextBox)
{
MessageBox.Show("Es un textBox del usercontrol");
}

}
else
MessageBox.Show("f2 pressed");
}
else
MessageBox.Show("f2 pressed");
}

Sashka

"Isabel" escribió en el mensaje de
noticias:uKCPL#
Hola Juan Carlos,

Es que este es precisamente el problema que tengo.
en el UserControl tengo varios textBox, y tengo (ahora mismo) capturados
los eventos KeyDown, KeyPress y KeyPreviewDown del userControl.
en cada uno de estos tres métodos tengo un punto de interrupción por lo
que veo que nunca pasa el código por aqui. (y estoy en modo debug).

Estoy intentando que cuando se pulse una tecla de función en estos textbox
ocurra algo.
Pero si pulso F2 en uno de estos textbox, lo único que se lanza es el F2
definido en el menú del formulario principal (aplicación MDI)

Grácias.



"Juan Carlos Paramá" escribió en el mensaje
news:
Hola,

No importan los KeyPreview de los formularios. Si los activas podrás
capturar los eventos en ambos formularios
pero seguiran lanzandose en los controles.

Si los textbox estan en un control de usuario es en ese control de
usuario donde tienes que capturarlos. No en el
formulario que los contenga. Si necesitas los eventos en el formulario
que contiene tu control tendrás que capturarlos
primero en tu control y después lanzarlos tu desde el control.

Saludos,

Juan Carlos Paramá




"Isabel" escribió en el mensaje de noticias
news:%
Hola,
Tengo una aplicación MDI. El formulario principal tiene el KeyPreview =
false.
Luego, en uno de los formularios hijos (que tambien tiene el
keyPreview=false) tengo un control de usuario.
Como puedo hacer para que los controles (textBox) que contien el control
de usuario, respondan a los eventos KeyPress, KeyDown, ... ???

He probado todas las combinaciones del KeyPreview en el formulario
principal, en el hijo que contien el usercontrol, pero nada. La
ejecución nunca pasa por los métodos keyPress y KeyDown del control de
usuario

Grácias









Respuesta Responder a este mensaje
#5 Isabel
28/08/2009 - 11:47 | Informe spam
Hola Sashka,

Efectivamente es como tu dices. F2 está como shortcut en un menu.
He puesto el código que mandaste y efectivament es así.

Lo que yo quiero es que reaccionen solo al F1 (puse F2 como ejemplo). Estoy
montando el sistema de ayuda que debe funcionar para cada uno de los
controles de la aplicación.
Para esto, queria capturar en el usercontrol la pusacion de F1, determinar
en qué control del usercontrol se ha producido la pulsación, y a partir de
ahí, mostrar un tema u otro de la ayuda.
No tengo ningun shortcut asignado al F1 y no veo la forma de capturarlo :(

Grácias.


"Sashka" escribió en el mensaje
news:
Yo creo que el problema es que F2 lo has puesto como shortcut en un
elemento de menú

Prueba esto en el evento del menu que corresponda.


private void menuItem_Click(object sender, System.EventArgs e)
{
if (this.ActiveMdiChild != null)
{
if (this.ActiveMdiChild.ActiveControl !=null &&
this.ActiveMdiChild.ActiveControl is UserControl1)
{
if ((this.ActiveMdiChild.ActiveControl as
UserControl1).ActiveControl is TextBox)
{
MessageBox.Show("Es un textBox del usercontrol");
}

}
else
MessageBox.Show("f2 pressed");
}
else
MessageBox.Show("f2 pressed");
}

Sashka

"Isabel" escribió en el mensaje de
noticias:uKCPL#
Hola Juan Carlos,

Es que este es precisamente el problema que tengo.
en el UserControl tengo varios textBox, y tengo (ahora mismo) capturados
los eventos KeyDown, KeyPress y KeyPreviewDown del userControl.
en cada uno de estos tres métodos tengo un punto de interrupción por lo
que veo que nunca pasa el código por aqui. (y estoy en modo debug).

Estoy intentando que cuando se pulse una tecla de función en estos
textbox ocurra algo.
Pero si pulso F2 en uno de estos textbox, lo único que se lanza es el F2
definido en el menú del formulario principal (aplicación MDI)

Grácias.



"Juan Carlos Paramá" escribió en el mensaje
news:
Hola,

No importan los KeyPreview de los formularios. Si los activas podrás
capturar los eventos en ambos formularios
pero seguiran lanzandose en los controles.

Si los textbox estan en un control de usuario es en ese control de
usuario donde tienes que capturarlos. No en el
formulario que los contenga. Si necesitas los eventos en el formulario
que contiene tu control tendrás que capturarlos
primero en tu control y después lanzarlos tu desde el control.

Saludos,

Juan Carlos Paramá




"Isabel" escribió en el mensaje de noticias
news:%
Hola,
Tengo una aplicación MDI. El formulario principal tiene el KeyPreview =
false.
Luego, en uno de los formularios hijos (que tambien tiene el
keyPreview=false) tengo un control de usuario.
Como puedo hacer para que los controles (textBox) que contien el
control de usuario, respondan a los eventos KeyPress, KeyDown, ... ???

He probado todas las combinaciones del KeyPreview en el formulario
principal, en el hijo que contien el usercontrol, pero nada. La
ejecución nunca pasa por los métodos keyPress y KeyDown del control de
usuario

Grácias









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