2011-02-19 17 views

Respuesta

36

Conjunto

myForm.KeyPreview = true; 

Crear un controlador para el evento KeyDown:

myForm.KeyDown += new KeyEventHandler(Form_KeyDown); 

Ejemplo de controlador:

// Hot keys handler 
    void Form_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.S)  // Ctrl-S Save 
     { 
      // Do what you want here 
      e.SuppressKeyPress = true; // Stops other controls on the form receiving event. 
     } 
    } 
+1

Oh, usted está en lo correcto. Olvidé establecer la propiedad 'KeyPreview', que es necesaria para este caso. +1. –

0

En primer lugar, es necesario controlar el evento KeyDown, y luego se puede empezar a ver hacia fuera para sus modificadores:

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S) 
    { 
     //Do whatever 
    } 
} 

Por supuesto, es necesario asegurarse de que su forma se suscribe al evento KeyDown.

2

me gustaría un evento KeyDown para el formulario y un poco de código como este:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == (Keys.Control | Keys.N)) 
    { 
     CreateNew(); 
    } 
} 
+1

¿alguien puede decirme qué es esto CreateNew()? ¿Es una función incorporada? – Riya

+0

@ riya7887: Es solo un ejemplo. No es un método incorporado. Puede crear dicho método y poner todo el código relacionado. –

2

Si está tratando de vincularlos a los elementos del menú en su aplicación, entonces no necesita ningún código. En el elemento de menú, puede simplemente configurar la propiedad de la tecla de método abreviado y ejecutará el mismo evento que haya configurado para hacer clic en su elemento de menú.

0

Puede configurarlo utilizando un menú oculto también, si lo desea. Simplemente establezca la propiedad de menu.visible = false;

2

También puede anular ProcessCmdKey en su tipo derivado Form así:

protected override bool ProcessCmdKey(ref Message message, Keys keys) 
{ 
    switch (keys) 
    { 
     case Keys.B | Keys.Control | Keys.Alt | Keys.Shift: 
      // ... Process Shift+Ctrl+Alt+B ... 

      return true; // signal that we've processed this key 
    } 

    // run base implementation 
    return base.ProcessCmdKey(ref message, keys); 
} 

yo creo que es más adecuado para teclas de acceso rápido. No es necesario KeyPreview.

3

Si su ventana tiene un menú, puede utilizar la propiedad ShortcutKeys de System.Windows.Forms.ToolStripMenuItem:

myMenuItem.ShortcutKeys = Keys.Control | Keys.S; 

En Visual Studio, se puede configurar en la página de propiedades del elemento de menú, también.

Cuestiones relacionadas