Zia*_*iki 5 .net c# string winforms
我正在寻找一种方法将a的值转换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);
Run Code Online (Sandbox Code Playgroud)
我需要的是string喜欢"Enter"被转换为System.Windows.Forms.Keys.Enter.但是KeyConverter没有返回任何东西.有什么想法吗?
使用Enum.Parse字符串转换成相应的枚举值:
public static Keys ConvertFromString(string keystr) {
return (Keys)Enum.Parse(typeof(Keys), keystr);
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果键字符串不在枚举中,Enum.Parse则抛出一个ArgumentException.如果您不想这样,请使用Enum.TryParse,返回一个bool,指示转换是否成功.
System.Windows.Forms.Keys是一个枚举,所以你可以使用 Enum.TryParse:
Keys key;
Enum.TryParse("Enter", out key);
Run Code Online (Sandbox Code Playgroud)
它是在 .NET 框架 4.0 中引入的,它比Enum.Parse自动推断类型参数更具可读性。
您可以检查布尔返回值以查看转换是否成功,无需为未定义的枚举值捕获异常。