2010-08-26 38 views

Respuesta

0

Puede controlar el evento Control.KeyPress e inspeccionar la combinación de teclas para hacer atajos de teclado:

4

Asumo que su tratando de poner en práctica Control ? atajos tipo como la copia camino y pasta de trabajo?

Puede crear un controlador genérico KeyDown y KeyUp que adjunte a cada formulario. Cada vez que obtenga un KeyDown almacene la clave en una lista (para mantener presionada una tecla y presionar otra). Cada vez que agrega una clave a la lista, verifique si la lista contiene alguna de sus combinaciones de teclas de método abreviado. Si es así, ejecuta el código que necesites.

Por cada KeyUp caso, asegúrese de que está eliminando de la lista (sólo es necesario para comprobar el acceso directo en KeyDown adiciones

EDIT:. Hice una búsqueda rápida y encontramos este misma solución implementada:

class KeyboardShortcuts 
{ 
    public static void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
    { 
     if (m_keysDownList.Contains(e.Key) == false) 
     { 
      m_keysDownList.Add(e.Key); 
      Debug.WriteLine(e.Key.ToString() + " Down"); 
     } 

     CheckForKeyCombos(); 
    } 

    public static void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) 
    { 
     m_keysDownList.Remove(e.Key); 
     Debug.WriteLine(e.Key.ToString() + " Up"); 
    } 


    public static void CheckForKeyCombos() 
    { 
     if (m_keysDownList.Contains(System.Windows.Input.Key.LeftCtrl)) 
     { 
      if (m_keysDownList.Contains(System.Windows.Input.Key.A)) 
      { 
       if (m_keysDownList.Contains(System.Windows.Input.Key.C)) 
       { 
        // Clear list before handeling (Dialogue boxes 
        // can hinder the listening for key up events, leaving 
        // keys in list - so clear first). 
        ClearKeysDownList(); 

        // Handle Ctrl + A + C Combo 
        HandleCtrlACCombo(); 
       } 
      } 
     } 
    } 

    private static void ClearKeysDownList() 
    {    
     m_keysDownList.Clear(); 
    } 

    public static void HandleCtrlACCombo() 
    { 
     if (handleCtrlACComboDelegate != null) 
     { 
      handleCtrlACComboDelegate(); 
     } 
    } 

    // Need a delegate instance for each combo 
    public delegate void HandleCtrlACComboDelegate(); 
    public static HandleCtrlACComboDelegate handleCtrlACComboDelegate; 

    private static List<System.Windows.Input.Key> m_keysDownList = new List<System.Windows.Input.Key>(); 
} 

puede ver la solución completa que esta es una cita del here (simplemente desplazarse a la parte inferior, ya que es en ese sitio mal que no hablamos el nombre de.

0

Si su formulario primario tiene botones o menús cual el usuario selecciona para abrir sub formularios, puede agregar una tecla de acceso muy simple mediante la adición de un signo & al atributo .Text.

Por ejemplo, si tiene un botón como Options puede modificar su texto de la siguiente manera: &Options. Hacer esto hará que Alt + O active el botón del formulario principal.

Alternativamente, si desea teclas de acceso rápido como Ctrl + O para abrir un formulario, usted tiene que suscribirse al evento de la forma principal KeyDown, y buscar esa combinación de teclas:

private void FormMain_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (ModifierKeys == Keys.Control && e.KeyCode == Keys.O)) 
      // open form 
    } 

Tenga en cuenta que puede necesitar establecer la propiedad KeyPreview de su formulario en True.

Finalmente, los elementos del menú de tira de herramientas tienen una propiedad ShortcutKeys que puede definir en el panel de propiedades y VS agregará automáticamente el código requerido al archivo Designer para admitir el atajo de teclado para activar el elemento del menú.

0

Paso N. °1 juego

 KeyPreview = True; 

Paso No.2

 if (e.Alt && e.KeyCode == Keys.C) 
     { 
      //your function 
     } 
+0

favor, ampliar su respuesta. –

Cuestiones relacionadas