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

我正在寻找一种在我的Windows Forms应用程序中用C#实现常用Windows键盘快捷键(例如Ctrl + F,Ctrl + N)的最佳方式。

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

我正在考虑在ChildForm_KeyDown事件中使用这样的事情:

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

但这不起作用。 按下按键时,事件甚至不会触发。 解决办法是什么?


您可能忘记将窗体的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);
}

在你的主窗体上

  • KeyPreview设置为True
  • 使用以下代码添加KeyDown事件处理程序

    private void MainForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.N)
        {
            SearchForm searchForm = new SearchForm();
            searchForm.Show();
        }
    }
    

  • 最好的方法是使用菜单助记符,例如在主窗体中有菜单条目,可以分配所需的键盘快捷键。 然后,其他所有内容都将在内部处理,而您所要做的只是实现在该菜单项的Click事件处理程序中执行的相应操作。

    链接地址: http://www.djcxy.com/p/44923.html

    上一篇: Best way to implement keyboard shortcuts in a Windows Forms application?

    下一篇: Making a WinForms TextBox behave like your browser's address bar