Convert string to appropriate Forms.Keys value?

I am looking for a way to convert a string value into an equivalent element of System.Windows.Forms.Keys . This value will then be used with PressKey to simulate the corresponding key. I tried using KeyConverter as follows:

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

I need a string like "Enter" to convert to System.Windows.Forms.Keys.Enter . But KeyConverter nothing. Any thoughts?

+4
source share
2 answers

Use Enum.Parse to convert a string to the corresponding enumeration value:

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

Note that Enum.Parse will Enum.Parse ArgumentException if the key string is not listed. If you don't want this, use Enum.TryParse instead, which returns a bool indicating whether the conversion was successful.

+5
source

System.Windows.Forms.Keys is an enum, so you can use Enum.TryParse :

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

It was introduced with the .NET framework 4.0 and is much more readable than Enum.Parse , because the type parameter is automatically output.

You can check the boolean return value to see if the conversion succeeded, eliminating the need to catch an exception for undefined enum values.

+4
source

Source: https://habr.com/ru/post/1434485/


All Articles