是否有可用于在.NET2.0 Windows应用程序中实现键盘快捷键的框架?这样做时应该注意哪些最佳实践?
答案 0 :(得分:2)
虽然没有明显的方法为菜单中的命令提供加速键,但添加它们并不是很难。有五个基本步骤:
定义加速器枚举。
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更详细地概述了上述步骤。
答案 1 :(得分:0)
实现快捷键的常用方法是在KeyDown或KeyUp等键盘事件中检测它们。
实施例
public void Form1_KeyUp(object sender,KeyEventArgs e)
{
if (e.Control && e.KeyData==Keys.A)
{
//handle ctrl+a
}