我有一个C#/.NET的Windows应用程序。我需要创建一些键盘快捷键来在不同的窗体之间导航。如何在.NET中创建键盘快捷键?
发布于 2010-08-26 15:51:17
您可以使用P/Invoke来register a global hotkey on the system。如果你不想要全局的东西,你总是可以在你的所有表单中处理KeyPress事件。
发布于 2010-08-26 15:51:04
我假设您正在尝试实现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的完整解决方案(只需滚动到底部,因为它在那个邪恶的网站上,我们没有提到它的名字。
发布于 2010-08-26 15:52:13
这类事情通常是使用windows挂钩来完成的。这是一篇MSDN文章,展示了如何使用它们:
https://stackoverflow.com/questions/3576787
复制相似问题