2010-08-26 64 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