/// <summary> /// 入力キーに該当する設定用のパネルコントロールに関するクラスのインスタンスを生成する /// </summary> /// <param name="inputKeyPanel">入力キーに該当する設定用のパネルコントロール</param> /// <param name="setting">プロパティグリッドコントロールに関連付けされている設定情報</param> /// <param name="propertyName">対象とする入力キーに該当する設定情報のプロパティ名</param> /// <returns>入力キーに該当する設定用のパネルコントロールに関するクラスのインスタンス</returns> public static SettingPanel CreateInstanceKeyInput( Panel inputKeyPanel, Setting setting, string propertyName) { return(new SettingPanel( inputKeyPanel, () => { InputKey inputKey = GetSettingPropertyValue <InputKey>(setting, propertyName); return inputKey.ConvertToString(inputKey); }, (property) => SummaryText(new InputKey(property)), (property) => CheckKeyInputProperty(property), (property) => InputOperate.MouseKeybordInput(new InputKey(property)))); // ラベルに表示するための概要文字列を取得するローカル関数 // 引数1:概要文字を生成するInputKeyオブジェクト // 戻り値:概要文字 string SummaryText(InputKey inputKey) { // 文字列に変換し返却 StringBuilder convertValue = new StringBuilder(); // Shiftキー(最初の1文字のみ) if (inputKey.Shift) { convertValue.Append(nameof(inputKey.Shift).Substring(0, 1)); convertValue.Append("|"); } // Ctrlキー(最初の1文字のみ) if (inputKey.Ctrl) { convertValue.Append(nameof(inputKey.Ctrl).Substring(0, 1)); convertValue.Append("|"); } // Altキー(最初の1文字のみ) if (inputKey.Alt) { convertValue.Append(nameof(inputKey.Alt).Substring(0, 1)); convertValue.Append("|"); } // Windowsロゴキー(最初の1文字のみ) if (inputKey.Win) { convertValue.Append(nameof(inputKey.Win).Substring(0, 1)); convertValue.Append("|"); } // キーコード convertValue.Append( new InputKey(inputKey.KeyCode, false, false, false, false, false).ToString()); // 押しっぱなしにするかのフラグ() if (inputKey.IsKeepPressing) { convertValue.Append("|"); convertValue.Append("凹"); } // 生成した文字列を返却 return(convertValue.ToString()); } // 入力キーに該当する設定情報のプロパティの設定値についてチェックを行うローカル関数 // 引数1:入力キーに該当する設定情報のプロパティ // 戻り値:チェック結果のプロパティ設定のステータス PropertySettingStatus CheckKeyInputProperty(string property) { // 入力キーがなしの場合は未設定を返却、それ以外の場合は正常を返却 return(new InputKey(property).KeyCode == Keys.None ? PropertySettingStatus.NotSet : SettingPanel.PropertySettingStatus.Ok); } }