对于键盘按键的操作C#提供了三种方法:KeyDown,KeyPress 和KeyUp 。三个函数分别对应的意义为:
- KeyDown:在控件有焦点的情况下按下键时发生。
- KeyPress:在控件有焦点的情况下按下键时发生。(下面会说和KeyDown 的区别)
-
KeyUp:在控件有焦点的情况下
释放
键时发生。
KeyPress 和KeyDown 、KeyPress之间的区别:
1.KeyPress主要用来捕获数字(
注意:包括Shift+数字的符号
)、字母(
注意:包括大小写
)、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符
KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键)
2.KeyPress 只能捕获单个字符
KeyDown 和KeyUp 可以捕获组合键。
3.KeyPress 可以捕获单个字符的大小写
4.KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写。
5.KeyPress 不区分小键盘和主键盘的数字字符。
KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。
6.其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。
用法:
不管是KeyPress、KeyDown还是KeyUp 都需要在使用之前先将KeyPreview属性置位true,方法如下所示:
public xxx_Form_x()
{
InitializeComponent();
KeyPreview = true; //使能KeyPreview
}
然后就可以重写事件了,代码如下所示(当然也可以在属性栏的事件按钮中双击需要使用的事件的名字就会自动生成并且跳转到事件),代码如下:
private void xxx_Form_x_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.Control && e.KeyCode == Keys.F2)
{
MessageBox.Show("You press the Alt and Ctrl and F2 buttons!");
}
if (e.KeyData == Keys.Up)
{
MessageBox.Show("You press the Up buttons!");
}
if (e.KeyValue == 27)
{
MessageBox.Show("You press the Esc buttons!");
}
}
private void xxx_Form_x_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 65)
{
MessageBox.Show("You press the A buttons!");
}
if (e.KeyChar == 97)
{
MessageBox.Show("You press the a buttons!");
}
//KeyChar是不区分数字是否在大小哪个键盘的
if (e.KeyChar == 48)
{
MessageBox.Show("You press the 0 buttons!");
}
}
private void xxx_Form_x_KeyUp(object sender, KeyEventArgs e)
{
//与KeyDown相似
//小键盘的数字0
if (e.KeyValue == 96)
{
MessageBox.Show("You press the 0 buttons in keypad!");
}
//小键盘的数字0
if (e.KeyCode == Keys.NumPad0)
{
MessageBox.Show("You press the 0 buttons in keypad!");
}
//主键盘的数字0
if (e.KeyCode == Keys.D0)
{
MessageBox.Show("You press the 0 buttons in primary keyboard!");
}
}