首页 > 编程笔记 > C#笔记 阅读:29

C# KeyDown、KeyUp和KeyPress键盘事件的用法(附带实例)

当某一控件取得焦点时,若按了键盘键则会产生键盘事件:
键盘事件是先有 KeyDown 事件,然后有 KeyPress 事件,最后是 KeyUp 事件,当有键盘事件发生时,对于 KeyDown 和 KeyUp 事件而言,事件管理程序所传递的第 2 个参数是 KeyEventArgs e。如果是 KeyPress 事件,则传递 KeyPressEventArgs e 参数。

C# KeyDown和KeyUp事件

当有键盘按键产生时,KeyEventArgs e 的属性如下:
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 的属性如下:
【实例】设计成绩输入程序,这个程序在分数成绩部分只能输入 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");
            }
        }
    }
}
执行结果为:

相关文章