はじめに
TextBoxでキーボード入力を細かく制御したいときに便利なのが
KeyPress・KeyDown・KeyUp の各イベントです。
それぞれ役割が異なるため、状況に応じて使い分けることが大切です。
各イベントの違い
- 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キーなどでは発生しない)KeyDownとKeyUpはすべてのキーに対応- 連続入力では
KeyDownが繰り返し発生する(キーリピート) - 入力制御を行う場合は
KeyPressでe.Handled = trueを使うのが定番
まとめ
KeyDown… キーが押された瞬間を検知KeyPress… 実際に入力される文字を検知(文字制御に便利)KeyUp… キーが離された瞬間を検知
キーボード操作を活用した入力チェックやショートカット処理を作るときに欠かせないイベントです。
Please follow and like us:

コメント