2010-01-25 15 views
9

quiero conseguir evento de pulsación de tecla en el panel de control de Windows en C#, es cualquier ayuda del cuerpo para mí ...Como llegar de pulsación de tecla en el control Panel de Windows en C#

+1

Haga clic en el panel. La segunda pestaña de propiedades (del panel) muestra eventos que puede disparar. Haga doble clic en KeyPressEvent y voila – RvdK

+1

@PowerRoy, eso no funcionará, el Panel no expone el método KeyPressEvent. Solo expone el evento PreviewKey. – James

+0

PreviewKey funciona bien si configura el foco en la paenl en su evento de mousedown. – TaW

Respuesta

10

Se debe controlar el evento Panel.KeyPress.

Ejemplo

public void MyKeyPressEventHandler(Object sender, KeyPressEventArgs e) 
{ 
    ... do something when key is pressed. 
} 

... 

(MyPanel as Control).KeyPress += new KeyPressEventHandler(MyKeyPressEventHandler); 
+0

hola gracias en realidad no estoy recibiendo Keypress Eventhandler para mi panel de control ¿me puede decir cómo conseguir eso ... – ratty

+0

Simplemente pruebe el ejemplo que James escribió. (MyPanel como control) .KeyPres estará allí, si escribe exactamente (MyPanel como control) donde MyPanel es el control de su panel de Windows. –

+8

Sé que esto es un poco tarde en el juego, pero el Panel Control no recibirá eventos relacionados con Key sin foco, y al hacer clic en el panel no se enfocará naturalmente. Puede evitar esto llamando a MyPanel.Focus() en un controlador de evento MouseDown para el Panel. Una vez que el Panel tiene foco, los eventos KeyUp, KeyDown y KeyPress funcionarán, incluso sin KeyPreview activado en el Formulario principal. – user1689175

9

El problema es, que en un principio su principal forma consiguió el KeyPress y enviará inmediatamente este mensaje al control activo. Si eso no controla esta tecla, se borrará hasta el control principal, y así sucesivamente.

Para interceptar esta cadena, tiene que en su Form.KeyPreview a true y agregue un controlador a Form.KeyPress. Ahora puede manejar la tecla presionada dentro de su formulario.

2

Los objetos "Panel" no pueden recibir el evento "KeyPress" correctamente.

He creado Panel sobrecarga:

public class PersoPanel : Panel 

y se utiliza el método reemplazado ProcessCmdKey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 

para interceptar las teclas pulsadas:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    MessageBox.Show("You press " + keyData.ToString()); 

    // dO operations here... 

    return base.ProcessCmdKey(ref msg, keyData); 
} 
Cuestiones relacionadas