zoukankan      html  css  js  c++  java
  • C#键盘事件处理(来源网上)

    C#键盘事件处理

    如果你希望用户按F1弹出chm帮助,代码如下:

    private void FrmMain_Load(object sender, EventArgs e)
    {
        this.KeyPreview = true;//获取或设置一个值,该值指示在将键事件传递到具有焦点的控件前,窗体是否将接收此键事件。
    }
    
    private void FrmMain_KeyUp(object sender, KeyEventArgs e)
    {
        if (Keys.F1 == e.KeyCode)
        {
            //MessageBox.Show("您所按动的键是:" + e.KeyCode.ToString());
            Help.ShowHelp(this,@"C:UsersHongYeDesktopRevitAPI.chm");
        }
    }

    键盘事件是在用户按下键盘上的一个键的时候发生的,可分为两类。第一类是KeyPress事件,当按下的键表示的是一个ASCII字符的时候就会触发这类事件,可通过他的KeyPressEventArgs类型参数的属性KeyChar来确定按下的键的ASCII。使用KeyPress时间无法判断是否按下了修改键(Shift,Alt和Ctrl),为了判断这些动作,就要处理KeyUp 或KeyDown事件,这些时间组成了第二类事件。该类事件有一个KeyEventsArgs类型参数,通过该参数可以测试是否按下了一些修改键。

    1.       KeyPressEventArgs类的主属性(KeyPress事件的一个参数类型)
    (1).Handle属性:用来获取或设置一个值,该值指示是否处理过KeyPress事件。
    (2).KeyChar属性:用来获取按下的键对应的字符,通常是该键的ASCII玛(返回的是键盘的值,如按‘K‘返回就是K)。

    2.KeyEventArgs类的主属性(KeyUp和KeyDown事件的一个参数)
    (1).Alt属性:用来获取一个值,该值提示是否曾按下了Alt键
    (2).Control属性:用来获取一个值,该值提示是否曾按下了Crtl键
    (3).Shift属性:用来获取一个值,该值提示是否曾按下了Shift键
    (4).Handle属性:用来获取一个值,该值提示是否曾处理过此事件
    (5).KeyCode属性:以Keys枚举值返回键盘键的键码,该属性不包含修改键信息,用于测试指定的键盘键
    (6).KeyData属性:以Keys枚举值返回键盘键的键码,该属性包含修改键信息,用于判断按下键的所有信息(可返回组合键)
    (7).KeyValue属性:以整数形式返回键码,而不是Keys枚举类型值。用于获得所按下键的数字表示
    (8).Modifiers属性:以Keys枚举值返回所按下的修改键,仅判断修改键的信息

    3.如何在C#程序中定义这些事件:
      C#中描述"KeyDown"、"KeyUp"的事件的Delegate是"KeyEventHandler"。而描述"KeyPress"所用的Delegate是"KeyPressEventHandler"。这二个Delegate都被封装在命名空"Syetem.Windows.Froms"中。为"KeyDown"、"KeyUp"的事件提供数据的类是"KeyEventArgs"。而为"KeyPress"事件提供数据的类是"KeyPressEventArgs"。同样这二者也被封装在命名空间"Syetem.Windows.Froms"中。

      在C#程序定义"KeyDown"、"KeyUp"事件的语法如下:
    "组件名称"."事件名称"+= new Syetem.Windows.Froms. KeyEventHandler("事件名称");

      下面是程序中具体实现代码:
    button1. KeyUp += new Syetem.Windows.Froms. KeyEventHandler(button1_KUp);

      下面是响应上面事件的基本结构。
    private void button1_KUp ( object sender , Syetem.Windows.Froms. KeyEventArgs e )
    {
    此处加入响应此事件的代码
    }

      在C#程序定义"KeyPress"事件的语法如下:
    "组件名称"."事件名称"+= new Syetem.Windows.Froms. KeyPressEventHandler("事件名称");

      下面是程序中具体实现代码:
    button1. KeyPress += new Syetem.Windows.Froms. KeyPressEventArgs(button1_KPress);

      在完成了事件的定义以后,就要在程序中加入响应此事件的代码,否则程序编译的时候会报错。下面是响应上面事件的基本结构。
    private void button1_KPress ( object sender , Syetem.Windows.Froms. KeyPressEventArgs e )
    {
    此处加入响应此事件的代码

    注释:程序中出现的"button1"是定义的一个按钮组件。

    例子:
       private void Form1_KeyUp(object sender, KeyEventArgs e)
       {
        MessageBox.Show("您所按动的键是:"+e.KeyCode.ToString());
       }

    C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]

     

    最近在做一个程序,需要实现窗口下的F5 刷新功能。

    研究了一下KeyDown,KeyPress 和KeyUp ,发现之间还是有点学问的。

    让我们带着如下问题来说明,如果你看到这些问题你都知道,那么这篇文章你就当复习吧:)

    1.这三个事件的顺序是怎么样的?

    2.KeyDown 触发后,KeyUp是不是一定触发?

    3.三个事件的定义

    4.KeyDown、KeyUp 和KeyPress 之间的区别

    5.如何区分是否按的是小键盘?

    6.PrScrn按键三个事件能够捕获吗?

    7.{菜单键}和{开始键}KeyPress能够捕获吗?

    8.如何捕获系统的组合键?

    9.通过什么方式捕获PrScrn按键事件?

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

    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 事件来判定 )

         这里简单的列举出CTRL+其它键的组合判定代码:

    private void Form3_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.Control)
                {
                    MessageBox.Show("KeyUp:Ctrl+" + e.KeyValue.ToString());
                }
            }
     (六)捕获PrScrn按键事件

     通过一种钩子的方式可以判定PrScrn 按键事件,钩子可以获取任何键盘事件。

    C#_e.Handled用法

    如果你希望用户按F1弹出chm帮助,代码如下:

    private void textBoxSize_KeyPress(object sender, KeyPressEventArgs e)
    
        {
          // Remove all characters that are not numbers, backspace, or enter.
          if ((e.KeyChar < 48 || e.KeyChar > 57) &&
                                                 e.KeyChar != 8 && e.KeyChar != 13)
          {
            e.Handled = true;
          }
          else if (e.KeyChar == 13)
          {
            // Apply size if the user hits enter
            TextBox txt = (TextBox)sender;
    
            if (txt.Text.Length > 0)
              ApplyTextSize(txt.Text);
            e.Handled = true;
            this.richTextBoxText.Focus();
          }
        }
    
     

       

    总结:Handled     获取或设置一个值,该值指示是否处理过KeyPress 事件  
               e.Handled = false的时候表示可以接受该事件  

               e.Handled = true时表示已经处理了事件(即不处理当前键盘事件)

               KeyChar     获取或设置与按下的键对应的字符

     MSDN帮助 https://msdn.microsoft.com/zh-cn/library/system.windows.forms.keypresseventargs.keychar.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

    using System;
    using System.Windows.Forms;
    
    public class Form1: Form
    {
        public Form1()
        {
            // Create a TextBox control.
            TextBox tb = new TextBox();
            this.Controls.Add(tb);
            tb.KeyPress += new KeyPressEventHandler(keypressed);
        }
    
        private void keypressed(Object o, KeyPressEventArgs e)
        {
            // The keypressed method uses the KeyChar property to check 
            // whether the ENTER key is pressed. 
    
            // If the ENTER key is pressed, the Handled property is set to true, 
            // to indicate the event is handled.
            if (e.KeyChar == (char)Keys.Return)
            {
                e.Handled = true;
            }
        }
    
        public static void Main()
        {
            Application.Run(new Form1());
        }
    }
     
     
  • 相关阅读:
    jQuery return false
    js获取拼音
    jQuery.getScript加载同域JS
    清除浮动,clearfix的bug
    chrome本地文件加载跨域请求
    中间容器宽度自适应的三栏布局
    mac安装nginx
    弹出一次“设为主页”和“加入收藏”代码
    未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
    IIS7/IIS7.5下轻松配置PHP利器(微软PHP Manager for IIS 7)
  • 原文地址:https://www.cnblogs.com/lhyqzx/p/5955440.html
Copyright © 2011-2022 走看看