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

#6 Sashka
28/08/2009 - 19:30 | Informe spam
En ese caso, lo que yo haría es no poner los manejadores (KeyDown, KeyPress
y KeyPreviewDown ) en cada control, eso implicaría demasiado código repetido
en toda tu aplicación.
Si tu pones a cada formulario hijo el KeyPreview en true, desde allí puedes
manejar la ayuda con el evento KeyDown del formulario... (Claro que también
lo podrías hacer desde el MDI)

private void Form2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode != Keys.F1) // Si no es F1 nos vamos
{
e.Handled = true;
return;
}
UserControl1 uc = this.ActiveControl as UserControl1; //
determinas si el control está en el usercontrol
if (uc != null)
{
if (uc.ActiveControl is TextBox)
{
TextBox tb = uc.ActiveControl as TextBox;
switch (tb.Name)
{
case "textBox1":
{
// Haces lo que tienes que hacer según el
control que sea
break;
}
}
}
}
else
{
// Este control no está en el Usercontrol
// Haces lo que tienes que hacer según el control que
sea
}
}

Sashka

"Isabel" escribió en el mensaje de
noticias:Oqw$
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















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida