C# KeyDown、KeyUp和KeyPress键盘事件的用法(附带实例)
当某一控件取得焦点时,若按了键盘键则会产生键盘事件:
键盘事件是先有 KeyDown 事件,然后有 KeyPress 事件,最后是 KeyUp 事件,当有键盘事件发生时,对于 KeyDown 和 KeyUp 事件而言,事件管理程序所传递的第 2 个参数是 KeyEventArgs e。如果是 KeyPress 事件,则传递 KeyPressEventArgs e 参数。
KeyCode:回传所按的键,可以由 Keys 列举常数得知所按的键,如 F1 到 F12,D0 到 D9(代表数字键)、A 到 Z(英文字母键),Up、Down、Left、Right(代表箭头键)。
【实例】设计会动的功能按钮,这个程序在功能按钮取得焦点后,若是按 Alt、Ctrl 或是 Shift 键则将功能按钮名称改为标记所按的键名称。同时按 Up、Down、Left 和 Right 可以移动功能按钮,每次移动 10 个像素。
【实例】设计成绩输入程序,这个程序在分数成绩部分只能输入 0~9 的数字,英文等级只能输入 A、B、C 和 F。输入如果错误,则会被阻挡,同时出现对话框告知输入错误发生。
- KeyDown:控件取得焦点,有键盘按下时则会产生此事件;
- KeyUp:控件取得焦点,放开键盘按键时则会产生此事件;
- KeyPress:控件取得焦点时,有键盘处于被按着的状态时则会产生此事件。
键盘事件是先有 KeyDown 事件,然后有 KeyPress 事件,最后是 KeyUp 事件,当有键盘事件发生时,对于 KeyDown 和 KeyUp 事件而言,事件管理程序所传递的第 2 个参数是 KeyEventArgs e。如果是 KeyPress 事件,则传递 KeyPressEventArgs e 参数。
C# KeyDown和KeyUp事件
当有键盘按键产生时,KeyEventArgs e 的属性如下:- Alt:回传是否按 Alt 键;
- Ctrl:回传是否按 Ctrl 键;
- Shift:回传是否按 Shift 键。
KeyCode:回传所按的键,可以由 Keys 列举常数得知所按的键,如 F1 到 F12,D0 到 D9(代表数字键)、A 到 Z(英文字母键),Up、Down、Left、Right(代表箭头键)。
【实例】设计会动的功能按钮,这个程序在功能按钮取得焦点后,若是按 Alt、Ctrl 或是 Shift 键则将功能按钮名称改为标记所按的键名称。同时按 Up、Down、Left 和 Right 可以移动功能按钮,每次移动 10 个像素。
using System;
using System.Windows.Forms;
namespace ch
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
button1.Top -= 10; // 往上移10像素
break;
case Keys.Down:
button1.Top += 10; // 往下移10像素
break;
case Keys.Left:
button1.Left -= 10; // 往左移10像素
break;
case Keys.Right:
button1.Left += 10; // 往右移10像素
break;
}
}
private void button1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt)
button1.Text = "按 Alt 键";
if (e.Shift)
button1.Text = "按 Shift 键";
if (e.Control)
button1.Text = "按 Ctrl 键";
}
}
}
执行结果如下图所示:
C# KeyPress事件
当产生 KeyPress 事件后,事件处理程序产生的参数 是KeyPressEventArgs e,这个 e 的属性如下:- KeyChar:用户所按的字符;
- Handled:默认是 false,表示不阻挡输入。如果设为 true 则阻挡输入。
【实例】设计成绩输入程序,这个程序在分数成绩部分只能输入 0~9 的数字,英文等级只能输入 A、B、C 和 F。输入如果错误,则会被阻挡,同时出现对话框告知输入错误发生。
using System;
using System.Windows.Forms;
namespace ch
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// 限制只能输入数字 0-9
private void txtScore_KeyPress(object sender, KeyPressEventArgs e)
{
int data = Convert.ToInt32(e.KeyChar);
// 允许 Enter(13)或 Backspace(8)键
if (data == 13 || data == 8)
return;
// 0 的 ASCII 码是 48,9 的 ASCII 码是 57
if (data < 48 || data > 57)
{
e.Handled = true;
MessageBox.Show("输入错误,只能输入0~9数字", "ch30_30");
}
}
// 限制只能输入字母 A、B、C、F
private void txtGrade_KeyPress(object sender, KeyPressEventArgs e)
{
int data = Convert.ToInt32(e.KeyChar);
// 允许 Enter(13)或 Backspace(8)键
if (data == 13 || data == 8)
return;
// A 的 ASCII 码是 65,F 的 ASCII 码是 70
// D 的 ASCII 码是 68,E 的 ASCII 码是 69
if ((data < 65 || data > 70) || (data >= 68 && data <= 69))
{
e.Handled = true;
MessageBox.Show("输入错误,只能输入A,B,C,F", "ch30_30");
}
}
}
}
执行结果为:
ICP备案:
公安联网备案: