[C#][Windows Formsアプリ][TextBox] KeyPress、KeyDown、KeyUpイベントでキー入力制御をする

スポンサーリンク

はじめに

TextBoxでキーボード入力を細かく制御したいときに便利なのが
KeyPressKeyDownKeyUp の各イベントです。
それぞれ役割が異なるため、状況に応じて使い分けることが大切です。

 

各イベントの違い

  • KeyDown … キーが押された瞬間に発生(すべてのキーに反応)
  • KeyPress … 実際に「文字」が入力されたときに発生(文字キーのみ)
  • KeyUp … キーが離されたときに発生
例:Enterキーを押したとき
KeyDown 発生
– (文字として入力されないので KeyPress は発生しない)
KeyUp 発生

 

基本の使い方

// KeyDownイベント
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enterキーが押されました");
    }
}

// KeyPressイベント
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
    {
        // 数字以外の入力をキャンセル
        e.Handled = true;
    }
}

// KeyUpイベント
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    label1.Text = "最後に押したキー: " + e.KeyCode.ToString();
}

 

実用例

数字のみ入力を許可する(KeyPress)

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
    {
        e.Handled = true; // 数字以外は無効化
    }
}

Enterキーで処理を実行する(KeyDown)

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Enterキーが押されました!");
    }
}

押されたキーを表示する(KeyUp)

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    label1.Text = "入力されたキー: " + e.KeyCode.ToString();
}

 

注意点

  • KeyPress は「文字」が入力されるキーのみ発生(ShiftやF1キーなどでは発生しない)
  • KeyDownKeyUp はすべてのキーに対応
  • 連続入力では KeyDown が繰り返し発生する(キーリピート)
  • 入力制御を行う場合は KeyPresse.Handled = true を使うのが定番

 

まとめ

  • KeyDown … キーが押された瞬間を検知
  • KeyPress … 実際に入力される文字を検知(文字制御に便利)
  • KeyUp … キーが離された瞬間を検知

キーボード操作を活用した入力チェックやショートカット処理を作るときに欠かせないイベントです。

Please follow and like us:

コメント

タイトルとURLをコピーしました