将String转换为相应的Forms.Keys值?

时间:2012-09-16 18:25:17

标签: c# .net winforms string

我正在寻找一种方法将string的值转换为等效的System.Windows.Forms.Keys项。然后,此值将与PressKey一起用于模拟相应的Key。我尝试使用这样的KeyConverter

    [DllImport("user32.dll", SetLastError = true)]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

    public static void PressKey(System.Windows.Forms.Keys key, bool up)
        {
            const int KEYEVENTF_EXTENDEDKEY = 0x1;
            const int KEYEVENTF_KEYUP = 0x2;
            if (up)
            {
                keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
            }
            else
            {
                keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
            }
        }

    KeyConverter kc = new KeyConverter();
    PressKey((System.Windows.Forms.Keys)kc.ConvertFromString(string), false);

我需要的是string,例如"Enter"转换为System.Windows.Forms.Keys.Enter。但是KeyConverter没有返回任何东西。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

使用Enum.Parse将字符串转换为相应的枚举值:

public static Keys ConvertFromString(string keystr) {
    return (Keys)Enum.Parse(typeof(Keys), keystr);
}

请注意,如果密钥字符串不在枚举中,Enum.Parse将抛出ArgumentException。如果您不想这样,请改用Enum.TryParse,这会返回一个bool,表明转换是否成功。

答案 1 :(得分:4)

System.Windows.Forms.Keys是一个枚举,因此您可以使用Enum.TryParse

Keys key;
Enum.TryParse("Enter", out key);

它是在.NET Framework 4.0中引入的,它比Enum.Parse更具可读性,因为类型参数是自动推断的。

您可以检查布尔返回值以查看转换是否成功,从而无需捕获未定义枚举值的异常。