2010-08-26 67 views

回答

0

您可以处理Control.KeyPress事件并检查组合键,使键盘快捷键:

4

我假设你想实现Control ?式快捷键喜欢的方式复制和粘贴的工作?

您可以创建附加到每个表单的通用KeyDownKeyUp处理程序。每当你得到一个KeyDown存储在一个列表中的密钥(以解释按住一个键并击中另一个键)。每次将密钥添加到列表中时,请检查列表是否包含您的任何快捷键组合。如果这样执行你需要的任何代码。

KeyUp事件,确保你从列表中删除(你只需要检查的快捷方式上KeyDown增加

编辑:做了快速搜索,发现此相同的解决方案来实现:

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>(); 
} 

你可以看到完整的解决方案,这是从here引用(只是滚动到页面底部,因为它是在我们不说话的那名邪恶的网站。

0

如果你的父窗体具有用户选择打开子表单按钮或菜单,您可以通过添加符号添加一个非常简单的热键&添加到.Text属性。

例如,如果您有一个按钮,如Options,则可以按如下方式更改其文本:&Options。这样做会使Alt + O激活父窗体中的按钮。

或者,如果你想热键如按Ctrl + Ø打开一个表格,你必须订阅主窗体的KeyDown事件,并查找组合键:

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

请注意,您可能需要将表单的KeyPreview属性设置为True。

最后,工具条菜单项有一个属性ShortcutKeys,您可以在属性面板中定义属性,VS会自动将所需的代码添加到Designer文件以支持通过键盘快捷方式激活菜单项。

0

步骤编号1设置

 KeyPreview = True; 

步骤二

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

请展开你的答案。 – 2013-01-13 22:59:06