- キーの押下状態の登録/解除/判別処理を提供
- Ctrl, Shift, Altなどもまとめられないか?
/// <summary> /// キー同時押し判定クラス /// </summary> public class KeyStateHelper { /// <summary> /// 押下確認対象 /// </summary> private List<Keys> _keyPressedList = new List<Keys>(); /// <summary> /// キー押下状態登録 /// </summary> /// <param name="key"></param> public void RegisterPressedKey(Keys key) { _keyPressedList.Add(key); } /// <summary> /// キー押下状態解除 /// </summary> /// <param name="key"></param> public void UnregisterPressedKey(Keys key) { _keyPressedList.Remove(key); } /// <summary> /// キー押下状態のクリア /// </summary> public void ClearPressedKey() { _keyPressedList.Clear(); } /// <summary> /// 指定キーが押されているかどうかを取得する。 /// </summary> /// <param name="keyList"></param> /// <returns></returns> public bool IsPressedKey(Keys[] keyList) { foreach (Keys key in keyList) { if (!_keyPressedList.Contains(key)) return false; } return true; } }
- KeyDown/Upで押下状態の登録/解除
- IsPressedキーで判定
private KeyStateHelper _keyHelper = new KeyStateHelper(); private void MainForm_KeyDown(object sender, KeyEventArgs e) { _keyHelper.RegisterPressedKey(e.KeyCode); // CTRL + SHIFT + A + B + C判定 if (!e.Control || !e.Shift) return; // A,B,C同時押し判定 if (_keyHelper.IsPressedKey(new Keys[] { Keys.A, Keys.B, Keys.C })) { _keyHelper.ClearPressedKey(); MessageBox.Show("pressed"); } } private void MainForm_KeyUp(object sender, KeyEventArgs e) { _keyHelper.UnregisterPressedKey(e.KeyCode); }
コメントをかく