English 中文(简体)
What s the benefit of Keyboard Accelerators added to an HashTable in .NET?
原标题:

For a long time I had the following bookmark in Firefox:
http://www.codeguru.com/csharp/.net/net_general/keyboard/article.php/c4639

I know decided to read it and implement it in the application it was supposed to be implemented some time ago. However, I don t see any benefit in such a method...

I know that the idea behind the hastable is provide a collection where we know for sure that there are no collisions, that every item is unique. But, is there really any big benefit in using an hashtable for keyboard accelerators?

For instance, what s the benefit in having this (as in the link above):

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); 
}

Over this:

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); 
}
最佳回答

The first sample is configurable. You simply change the contents of the hashtable and you can change the accelerators at runtime letting the user configure them.

Here the hashtable is used not exactly for the uniqueness constraint. Its value comes from the ability to do quick retrievals of data based on a key (in this case, literally).

Are you using .NET 2.0? If so, you should use a Dictionary<Keys, Accelerator>, instead of an Hashtable, because you get strong-typing.

问题回答

暂无回答




相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签