首页 > 代码库 > KeyPress 和KeyDown 、KeyPress之间的区别

KeyPress 和KeyDown 、KeyPress之间的区别

 

(一)键事件按下列顺序发生: 

  1. KeyDown

  2. KeyPress

  3. KeyUp

 (二)KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发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 都不能捕获。

(五)系统组合键的判定

在使用键盘的时候,通常会使用到CTRL+SHIFT+ALT 类似的组合键功能。对于此,我们如何来判定?

通过KeyUp 事件能够来处理(这里说明一下为什么不用KeyDown,因为在判定KeyDown的时候,CTRL、SHIFT和ALT 属于一直按下状态,然后再加另外一个键是不能准确捕获组合键,所以使用KeyDown 是不能准确判断出的,要通过KeyUp 事件来判定 )

 

1.KeyDown事件

  KeyDown事件在首次按下某个键时发生。

  示例  KeyDown事件的使用

  本示例中,判断用户是否按下特殊键,如果是,则显示在窗体的标题栏上。

  程序主要代码如下。

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      string G_str_Mode = "";
      string G_str_text = e.KeyCode + ":" + e.Modifiers + ":" + e.KeyData + ":" + "(" + e.KeyValue + ")";
      if (e.Shift == true)
        G_str_Mode = "Shift 键被按下";
      if (e.Control == true)
        G_str_Mode = "Ctrl 键被按下";
      if (e.Alt == true)
        G_str_Mode = "Alt 键被按下";
      this.Text = G_str_text + G_str_Mode;
    }

  注意:上面的代码中,KeyDown事件取得了一个KeyEventArgs对象e,并返回相关的按键信息,KeyEventArgs参数提供数个属性值,这些属性根据键盘上被按下的按键返回对应值。KeyEventArgs参数的属性值如表所示。

  表   KeyEventArgs属性值

属性值说明
Control获取一个值,该值指示是否曾按下Ctrl键
KeyCode获取KeyDown或KeyUp事件的键盘代码
KeyData获取KeyDown或KeyUp事件的键数据
KeyData获取KeyDown或KeyUp事件的键数据
KeyValue获取KeyDown或KeyUp事件的键盘值
Modifiers获取KeyDown或KeyUp事件的修饰符标志。这些标志指示按下的Ctrl、Shift和Alt键的组合
Shift获取一个值,该值指示是否曾按下Shift键

 2.Keyup事件

 Keyup事件在释放键时发生。

 示例 Keyup事件的使用

 本示例实现的是,当程序运行的时候,按完键盘后,自动设置窗体的大小。

 程序主要代码如下。

 private void frmKeyDownUP_KeyUp(object sender, KeyEventArgs e)
  
    {
      this.ClientSize = new System.Drawing.Size(800,100);
    }

(一)键事件按下列顺序发生: 

  1. KeyDown

  2. KeyPress

  3. KeyUp

 (二)KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发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 都不能捕获。

(五)系统组合键的判定

在使用键盘的时候,通常会使用到CTRL+SHIFT+ALT 类似的组合键功能。对于此,我们如何来判定?

通过KeyUp 事件能够来处理(这里说明一下为什么不用KeyDown,因为在判定KeyDown的时候,CTRL、SHIFT和ALT 属于一直按下状态,然后再加另外一个键是不能准确捕获组合键,所以使用KeyDown 是不能准确判断出的,要通过KeyUp 事件来判定 )

 

1.KeyDown事件

  KeyDown事件在首次按下某个键时发生。

  示例  KeyDown事件的使用

  本示例中,判断用户是否按下特殊键,如果是,则显示在窗体的标题栏上。

  程序主要代码如下。

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      string G_str_Mode = "";
      string G_str_text = e.KeyCode + ":" + e.Modifiers + ":" + e.KeyData + ":" + "(" + e.KeyValue + ")";
      if (e.Shift == true)
        G_str_Mode = "Shift 键被按下";
      if (e.Control == true)
        G_str_Mode = "Ctrl 键被按下";
      if (e.Alt == true)
        G_str_Mode = "Alt 键被按下";
      this.Text = G_str_text + G_str_Mode;
    }

  注意:上面的代码中,KeyDown事件取得了一个KeyEventArgs对象e,并返回相关的按键信息,KeyEventArgs参数提供数个属性值,这些属性根据键盘上被按下的按键返回对应值。KeyEventArgs参数的属性值如表所示。

  表   KeyEventArgs属性值

属性值说明
Control获取一个值,该值指示是否曾按下Ctrl键
KeyCode获取KeyDown或KeyUp事件的键盘代码
KeyData获取KeyDown或KeyUp事件的键数据
KeyData获取KeyDown或KeyUp事件的键数据
KeyValue获取KeyDown或KeyUp事件的键盘值
Modifiers获取KeyDown或KeyUp事件的修饰符标志。这些标志指示按下的Ctrl、Shift和Alt键的组合
Shift获取一个值,该值指示是否曾按下Shift键

 2.Keyup事件

 Keyup事件在释放键时发生。

 示例 Keyup事件的使用

 本示例实现的是,当程序运行的时候,按完键盘后,自动设置窗体的大小。

 程序主要代码如下。

 private void frmKeyDownUP_KeyUp(object sender, KeyEventArgs e)
  
    {
      this.ClientSize = new System.Drawing.Size(800,100);
    }

KeyPress 和KeyDown 、KeyPress之间的区别