我在C#/ .NET中有一个Windows应用程序。我需要制作一些键盘快捷键来在不同的表单之间导航。如何在.NET中创建键盘快捷键?
答案 0 :(得分:5)
您可以使用P / Invoke register a global hotkey on the system。如果您不想要全局的东西,您可以随时处理所有表单中的KeyPress事件。
答案 1 :(得分:4)
我假设您尝试实施Control ?
类型的快捷方式,例如复制和粘贴工作方式?
您可以创建附加到每个表单的通用KeyDown
和KeyUp
处理程序。每当你得到一个KeyDown
将密钥存储在一个列表中(以便按住一个密钥并点击另一个密钥)。每次向列表添加密钥时,请检查列表是否包含任何快捷键组合。如果是,请执行您需要的任何代码。
对于每个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>();
}
你可以看到here引用的完整解决方案(只是滚动到底部,因为它位于那个我们不会说出名字的邪恶网站上。
答案 2 :(得分:1)
这些事情通常都是使用Windows钩子完成的。这是一篇MSDN文章,展示了如何使用它们:
答案 3 :(得分:0)
您可以处理Control.KeyPress事件并检查组合键以制作键盘快捷键:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
答案 4 :(得分:0)
如果您的父表单包含用户选择打开子表单的按钮或菜单,则可以通过在.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将自动将所需代码添加到Designer文件中,以支持键盘快捷方式以激活菜单项。 / p>
答案 5 :(得分:0)
第1步
KeyPreview = True;
第2步
if (e.Alt && e.KeyCode == Keys.C)
{
//your function
}