Keys列挙体のメンバー名が分かりにくいから置換する
Keys Enum (System.Windows.Forms) | Microsoft Docs
これでキーの名前が分かるんだけど、MacBookはOME〜なんちゃらっていうマイナーなキーボードにあたるらしくて、キーコードも特殊なので対応しなきゃいけない。
あと数字キーはD1じゃなくて1、Multiplyとかも記号で扱いたいなあ、みたいな感じ。
System.Collections.Hashtable keyFix = new System.Collections.Hashtable(); keyFix.Add("D1", "1"); keyFix.Add("D2", "2"); keyFix.Add("D3", "3"); keyFix.Add("D4", "4"); keyFix.Add("D5", "5"); keyFix.Add("D6", "6"); keyFix.Add("D7", "7"); keyFix.Add("D8", "8"); keyFix.Add("D9", "9"); keyFix.Add("D0", "0"); keyFix.Add("Multiply", "*"); keyFix.Add("Separator", "|"); keyFix.Add("Subtract", "-"); keyFix.Add("Decimal", "."); keyFix.Add("Divide", "/"); keyFix.Add("ShiftKey", "Shift"); keyFix.Add("ControlKey", "Ctrl"); keyFix.Add("Menu", "Alt"); keyFix.Add("Back", "BackSpace"); keyFix.Add("OemOpenBrackets", "["); keyFix.Add("Oem4", "["); keyFix.Add("OemCloseBrackets", "]"); keyFix.Add("Oem6", "]"); keyFix.Add("OemPipe", "|"); keyFix.Add("Oem5", "|"); keyFix.Add("OemQuotes", "'"); keyFix.Add("Oem7", "'"); keyFix.Add("OemSemicolon", ";"); keyFix.Add("Oem1", ";"); keyFix.Add("OemQuestion", "/"); keyFix.Add("Oem2", "/"); keyFix.Add("OemPeriod", "."); keyFix.Add("Oemcomma", ","); keyFix.Add("Oemtilde", "`"); keyFix.Add("Capital", "CapsLock");
やりたいこと
// キー入力とかが絡むイベントハンドラとかで string key = e.KeyCode.ToString(); foreach(string k in keyFix.Keys) { if (key.Equals(k)) { key = key.Replace(k, keyFix[k].ToString()); } }