我有一个使用C#/.NET开发的Windows应用程序。我需要创建一些键盘快捷键以在不同的窗体间导航。在.NET中如何创建键盘快捷键?
我有一个使用C#/.NET开发的Windows应用程序。我需要创建一些键盘快捷键以在不同的窗体间导航。在.NET中如何创建键盘快捷键?
Control ?
类型快捷方式吗?KeyDown
和 KeyUp
处理程序,将它们附加到每个窗体上。每次您按下键时,将按键存储在列表中(以便考虑按住一个键并同时按下另一个键的情况)。每次添加键到列表中时,请检查您的列表是否包含任何快捷键组合。如果是,则执行您需要的任何代码。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>();
}
如果您的父表单上有按钮或菜单,用户选择打开子表单,您可以通过在 .Text 属性中添加一个和符号 &
来添加一个非常简单的快捷键。
例如,如果您有一个名为 Options
的按钮,您可以按如下方式更改其文本:&Options
。这样做将使得从父表单上按下 Alt+O 将会激活该按钮。
或者,如果您想要像 Ctrl+O 这样的热键来打开一个表单,您必须订阅主表单的 KeyDown
事件,并查找该键组合:
private void FormMain_KeyDown(object sender, KeyEventArgs e)
{
if (ModifierKeys == Keys.Control && e.KeyCode == Keys.O))
// open form
}
KeyPreview
属性设置为True。ShortcutKeys
属性,您可以在属性面板中定义,VS会自动添加所需的代码到设计文件中,以支持激活菜单项的键盘快捷键。步骤一:设置
KeyPreview = True;
步骤二
if (e.Alt && e.KeyCode == Keys.C)
{
//your function
}