一尘不染

在Windows Forms应用程序中实现键盘快捷键的最佳方法?

c#

我正在寻找在C#的Windows窗体应用程序中实现常见Windows键盘快捷键(例如Ctrl+
FCtrl+ N)的最佳方法。

该应用程序具有一个主窗体,该主窗体承载许多子窗体(一次一个)。当用户点击Ctrl+时F,我想显示一个自定义搜索表单。搜索表单将取决于应用程序中当前打开的子表单。

我当时在考虑在 ChildForm_KeyDown 事件中使用类似的 方法

   if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
        // Show search form

但这是行不通的。按下某个键时,事件甚至不会触发。解决办法是什么?


阅读 243

收藏
2020-05-19

共1个答案

一尘不染

您可能忘记了将表单的KeyPreview属性设置为True。通用方法是重写ProcessCmdKey()方法:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if (keyData == (Keys.Control | Keys.F)) {
    MessageBox.Show("What the Ctrl+F?");
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
2020-05-19