【问题标题】:What's the benefit of Keyboard Accelerators added to an HashTable in .NET?将键盘加速器添加到 .NET 中的 HashTable 有什么好处?
【发布时间】:2010-12-19 03:07:47
【问题描述】:

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

【问题讨论】:

  • 第一个示例在索引器中使用key。你的意思是keyData
  • AcceleratorKey 方法是什么?
  • 可能是keyData,我只是从文章中复制/粘贴。 AcceleratorKey 方法和其他所有内容都在文章中。这是一个简短的阅读。

标签: .net winforms keyboard-shortcuts hashtable


【解决方案1】:

第一个示例是可配置的。您只需更改哈希表的内容,即可在运行时更改加速器,让用户对其进行配置。

这里没有完全使用哈希表作为唯一性约束。它的价值来自于基于键(在本例中是字面意思)快速检索数据的能力。

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

【讨论】:

  • 当我可以直接在案例中进行检索时,我仍然无法看到/理解基于密钥检索某些内容的好处。我看到这样做的唯一原因是代码组织并使其更清洁,仅此而已。但这只有在我有很多键盘加速器的情况下才会真正受益。如果他们只是几个,我认为不值得。
  • 运行时更改加速器的能力怎么样?
猜你喜欢
  • 2014-02-27
  • 2020-04-03
  • 2010-10-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
相关资源
最近更新 更多