键盘加速器在.NET中添加到HashTable有什么好处?

时间:2009-11-21 23:47:49

标签: .net winforms keyboard-shortcuts hashtable

很长一段时间我在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); 
}

1 个答案:

答案 0 :(得分:2)

第一个样本是可配置的。您只需更改哈希表的内容,就可以在运行时更改加速器,让用户配置它们。

此处哈希表不是完全用于唯一性约束。它的价值来自于能够根据密钥快速检索数据(在这种情况下,字面意思)。

您使用的是.NET 2.0吗?如果是这样,你应该使用Dictionary<Keys, Accelerator>而不是Hashtable,因为你会得到强类型。