Dot-Net

Windows Forms .NET 中的熱鍵(非全域)

  • July 16, 2011

在我的 Windows 窗體應用程序中,我希望每次按下一個特殊按鈕來執行測試。有幾十個控制項,因此在每個控制項中實施它都需要太多時間。

有沒有辦法可以設置熱鍵,所以無論我在應用程序中做什麼,我都可以按下鍵,它會觸發我的事件?

ProcessCmdKey您可以在控制項或表單中覆蓋和處理您的熱鍵。

來自MSDN

ProcessCmdKey 方法首先確定控制項是否具有 ContextMenu,如果有,則啟用 ContextMenu 來處理命令鍵。如果命令鍵不是菜單快捷方式並且控制項具有父級,則該鍵將傳遞給父級的 ProcessCmdKey 方法。最終效果是命令鍵在控制層次結構中“冒泡”。除了使用者按下的鍵之外,鍵數據還指示與鍵同時按下的修飾鍵(如果有的話)。修飾鍵包括 SHIFT、CTRL 和 ALT 鍵。

例如:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
   // if it is a hotkey, return true; otherwise, return false
   switch (keyData)
   {
       case Keys.Control | Keys.C:
           // do something
           return true;
       default:
           break;
   }

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

引用自:https://stackoverflow.com/questions/2790913