【发布时间】:2023-06-08 01:45:01
【问题描述】:
是否有任何框架可用于在 .NET2.0 Windows 应用程序中实现键盘快捷键?另外,在执行此操作时应注意哪些最佳做法?
【问题讨论】:
标签: windows .net-2.0 keyboard-shortcuts
是否有任何框架可用于在 .NET2.0 Windows 应用程序中实现键盘快捷键?另外,在执行此操作时应注意哪些最佳做法?
【问题讨论】:
标签: windows .net-2.0 keyboard-shortcuts
虽然没有明显的方法可以为不在菜单中的命令提供加速键,但添加这些快捷键并不难。有五个基本步骤:
定义一个加速器枚举。
private enum Accelerators { Unspecified = 0, Home, Save, Print, Logout };
创建一个包含枚举值的哈希表。
Hashtable _accelHash() = new Hashtable();
创建一个类来表示加速键。
使用 Keys 枚举加载表。
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.H),
Accelerators.Home);
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.S),
Accelerators.Save);
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.P),
Accelerators.Print);
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.X),
Accelerators.Logout);
最后,重写 ProcessCmdKey 并使用 switch 语句调度到正确的方法。
protected override bool ProcessCmdKey(ref Message msg,
Keys keyData)
{
...
}
或者,对于稍微复杂的方法,您可以将哈希表映射到您想要调用的方法的委托,只要它们都具有相同的方法签名。
Here's a short article 更详细地概述了上述步骤。
【讨论】:
实现快捷键的一种常见方法是在键盘事件中检测它们,例如 KeyDown 或 KeyUp。
例子
public void Form1_KeyUp(object sender,KeyEventArgs e)
{
if (e.Control && e.KeyData==Keys.A)
{
//handle ctrl+a
}
【讨论】: