プログラミングに関する小ネタ、Tips、その他色々

  • キーの押下状態の登録/解除/判別処理を提供
  • 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);
}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

カテゴリ

プログラミング言語

スクリプト言語

プラットフォーム

ライブラリ

その他

編集テスト用メニュー

【メニュー編集】

管理人/副管理人のみ編集できます