很长一段时间我在Firefox中都有以下书签:
http://www.codeguru.com/csharp/.net/net_general/keyboard/article.php/c4639
我知道决定阅读它并在应用程序中实现它,它应该在不久前实现。但是,我认为这种方法没有任何好处......
我知道hastable背后的想法是提供一个集合,我们确信没有碰撞,每个项目都是唯一的。但是,使用键盘加速器的散列表真的有什么好处吗?
例如,这有什么好处(如上面的链接):
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
Accelerators accel = Accelerators.Unspecified;
if (_accelHash.ContainsKey(AcceleratorKey(keyData))) {
accel = (Accelerators)_accelHash[key];
switch (accel) {
case Accelerators.Home:
DisplayHome();
return true;
}
}
return base.ProcessCmdKey(ref m, keyData);
}
通过这个:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
switch (keyData) {
case Keys.Alt | Keys.H:
DisplayHome();
return true;
}
return base.ProcessCmdKey(ref m, keyData);
}
答案 0 :(得分:2)
第一个样本是可配置的。您只需更改哈希表的内容,就可以在运行时更改加速器,让用户配置它们。
此处哈希表不是完全用于唯一性约束。它的价值来自于能够根据密钥快速检索数据(在这种情况下,字面意思)。
您使用的是.NET 2.0吗?如果是这样,你应该使用Dictionary<Keys, Accelerator>
而不是Hashtable,因为你会得到强类型。