在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
事件处理程序中执行的相应操作。
上一篇: Best way to implement keyboard shortcuts in a Windows Forms application?
下一篇: Making a WinForms TextBox behave like your browser's address bar