キーボード

[C#] キー入力処理をキャンセルする方法

C#でキー入力処理をキャンセルする方法は、主にイベントハンドラーを使用して行います。

Windows Formsアプリケーションでは、KeyPressイベントを利用し、KeyPressEventArgsHandledプロパティをtrueに設定することで、特定のキー入力をキャンセルできます。

例えば、特定のキーが押されたときにその入力を無効にしたい場合、KeyPressイベント内で条件をチェックし、該当する場合にe.Handled = true;とすることで、そのキー入力が処理されないようにします。

これにより、ユーザーの入力を制御し、不要なキー操作を無効化できます。

KeyPressイベントでのキー入力キャンセル

KeyPressEventArgsの概要

KeyPressEventArgsは、キーが押されたときに発生するイベントに関連する情報を提供するクラスです。

このクラスは、押されたキーの文字を表すKeyCharプロパティを持っています。

KeyPressイベントは、ユーザーがキーボードから文字を入力したときに発生し、特にテキストボックスなどの入力コントロールでよく使用されます。

Handledプロパティの使い方

Handledプロパティは、イベントが処理されたかどうかを示すブール値です。

このプロパティをtrueに設定することで、イベントの処理をキャンセルできます。

これにより、特定のキー入力を無視することが可能になります。

以下は、Handledプロパティの使用例です。

private void MyForm_KeyPress(object sender, KeyPressEventArgs e)
{
    // 特定のキー入力をキャンセルする
    if (e.KeyChar == 'a') // 'a'キーが押された場合
    {
        e.Handled = true; // イベントを処理済みにする
    }
}

特定のキー入力をキャンセルする方法

特定のキー入力をキャンセルするには、KeyPressイベントを利用し、KeyPressEventArgsHandledプロパティを設定します。

以下のサンプルコードでは、数字の入力をキャンセルする方法を示します。

private void MyForm_KeyPress(object sender, KeyPressEventArgs e)
{
    // 数字の入力をキャンセルする
    if (char.IsDigit(e.KeyChar)) // 数字が押された場合
    {
        e.Handled = true; // イベントを処理済みにする
    }
}

このコードを使用すると、テキストボックスに数字を入力しようとした場合、その入力が無視されます。

これにより、特定の条件に基づいてユーザーの入力を制御することができます。

実装例

数字入力のみを許可するテキストボックス

数字入力のみを許可するテキストボックスを作成するには、KeyPressイベントを利用して、数字以外の入力をキャンセルします。

以下のサンプルコードでは、テキストボックスに数字のみを入力できるように設定しています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // 数字以外の入力をキャンセルする
        if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) // 数字または制御文字以外
        {
            e.Handled = true; // イベントを処理済みにする
        }
    }
}

このコードを実行すると、テキストボックスには数字と制御文字(Backspaceなど)しか入力できなくなります。

特定のキーを無効化する方法

特定のキーを無効化するには、KeyPressイベントを使用して、無効化したいキーを指定します。

以下のサンプルコードでは、Enterキーの入力をキャンセルしています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // Enterキーの入力をキャンセルする
        if (e.KeyChar == (char)Keys.Enter) // Enterキーが押された場合
        {
            e.Handled = true; // イベントを処理済みにする
        }
    }
}

このコードを実行すると、テキストボックス内でEnterキーを押しても、何も起こらなくなります。

ショートカットキーのキャンセル

ショートカットキーをキャンセルするには、KeyDownイベントを使用することが一般的です。

以下のサンプルコードでは、Ctrl + Sのショートカットキーを無効化しています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        this.KeyDown += new KeyEventHandler(MyForm_KeyDown);
    }
    private void MyForm_KeyDown(object sender, KeyEventArgs e)
    {
        // Ctrl + Sのショートカットキーをキャンセルする
        if (e.Control && e.KeyCode == Keys.S) // Ctrl + Sが押された場合
        {
            e.SuppressKeyPress = true; // キー入力を抑制する
        }
    }
}

このコードを実行すると、フォーム内でCtrl + Sを押しても、何も反応しなくなります。

これにより、特定のショートカットキーの動作を制御することができます。

応用例

複数のキー入力を同時にキャンセルする

複数のキー入力を同時にキャンセルするには、KeyPressイベントで条件を組み合わせてチェックします。

以下のサンプルコードでは、特定のキー(A、B、C)を同時にキャンセルしています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // A、B、Cの入力をキャンセルする
        if (e.KeyChar == 'A' || e.KeyChar == 'B' || e.KeyChar == 'C')
        {
            e.Handled = true; // イベントを処理済みにする
        }
    }
}

このコードを実行すると、テキストボックスにA、B、Cのいずれかを入力しようとすると、その入力が無視されます。

フォーカスのあるコントロールでのキー入力制御

特定のコントロールにフォーカスがある場合にのみキー入力を制御することも可能です。

以下のサンプルコードでは、テキストボックスにフォーカスがあるときだけ、特定のキー(Enterキー)をキャンセルしています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    }
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        // テキストボックスにフォーカスがある場合のみEnterキーをキャンセルする
        if (textBox1.Focused && e.KeyChar == (char)Keys.Enter) // Enterキーが押された場合
        {
            e.Handled = true; // イベントを処理済みにする
        }
    }
}

このコードを実行すると、テキストボックスにフォーカスがあるときにEnterキーを押しても、何も起こらなくなります。

カスタムコントロールでのキー入力キャンセル

カスタムコントロールを作成し、その中でキー入力をキャンセルすることもできます。

以下のサンプルコードでは、カスタムテキストボックスを作成し、特定のキー(Xキー)をキャンセルしています。

public class CustomTextBox : TextBox
{
    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        // Xキーの入力をキャンセルする
        if (e.KeyChar == 'X')
        {
            e.Handled = true; // イベントを処理済みにする
        }
        base.OnKeyPress(e); // 基底クラスのメソッドを呼び出す
    }
}

このカスタムコントロールをフォームに追加すると、Xキーを押してもその入力が無視されます。

これにより、特定の動作を持つカスタムコントロールを作成することができます。

まとめ

この記事では、C#のWindowsフォームにおけるキー入力処理のキャンセル方法について詳しく解説しました。

具体的には、KeyPressイベントやHandledプロパティの使い方、特定のキー入力をキャンセルする方法、さらには応用例として複数のキー入力の制御やカスタムコントロールでの実装方法について触れました。

これらの知識を活用することで、ユーザーインターフェースの操作性を向上させることが可能です。

ぜひ、実際のプロジェクトにおいてこれらのテクニックを試してみてください。

関連記事

Back to top button