2

除了从快捷方式中获取密钥之外,还有其他方法吗?

sc 是类型System.Windows.Forms.Shortcut

var k = (Keys)sc;

我需要为每个键使用单独的字符串,因为我使用的是 Progress ABL .NET 桥(不要问),所以上述方法不起作用。

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

4

3 回答 3

5

ShortCut 枚举值已经经过仔细选择,以与快捷方式的 Keys 枚举完全匹配。例如,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。

于 2013-10-07T13:58:18.900 回答
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.
于 2019-06-06T13:13:22.957 回答
1

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

于 2019-02-23T11:17:38.863 回答