从ShortCut获取密钥

时间:2013-10-07 09:58:32

标签: c# winforms

除了

之外还有另一种从快捷方式获取密钥的方法吗?

sc的类型为System.Windows.Forms.Shortcut

var k = (Keys)sc;

我需要为每个键分别使用单独的字符串,因为我使用的是Progress ABL .NET桥,所以上面的代码不起作用(请不要问)。

我认为sc应该是一个整数,但显然在.NET中,这行代码运行正常。

3 个答案:

答案 0 :(得分:5)

已经仔细选择了ShortCut枚举值,以便与快捷键的键枚举完全匹配。例如,ShortCut.CtrlShiftF1是0x30070匹配(Keys.Control | Keys.Shift | Keys.F1):0x20000 | 0x10000 | 0x00070 = 0x30070。这不是偶然的。

已经提供了将ShortCut转换为字符串,如果将ShowShortcut属性设置为True,MenuStrip中的菜单项可以自动显示MenuItem.Shortcut的字符串。您可以在自己的代码中使用相同的技术,使用KeysConverter类:

    var sc = Shortcut.CtrlShiftF1;
    var txt = new KeysConverter().ConvertToString((Keys)sc);
    Console.WriteLine(txt);

输出:

  

Ctrl + Shift + F1   

答案 1 :(得分:1)

ABL中的示例:

USING Progress.Util.TypeHelper FROM ASSEMBLY.
USING System.Enum FROM ASSEMBLY.
USING System.Windows.Forms.Keys FROM ASSEMBLY.
USING System.Windows.Forms.Shortcut FROM ASSEMBLY.

DEFINE VARIABLE ShortCut AS ShortCut NO-UNDO.
DEFINE VARIABLE Keys_ AS Keys NO-UNDO.

ShortCut = System.Windows.Forms.Shortcut:CtrlShiftF1.
Keys_ = CAST(Enum:ToObject(TypeHelper:GetType("System.Windows.Forms.Keys"), ShortCut:value__), Keys).

MESSAGE Keys_
    VIEW-AS ALERT-BOX.

答案 2 :(得分:0)

我已经通过在KeyDown事件处理程序中将System.Windows.Forms.Shortcut的值GetHashValue()与e:KeyData:GetHGashValue()的结果进行比较,使用ABL .NET桥解决了此问题。