中琅软件教程网

首页搜索登录
首页业界网页平面多媒体程序数据库办公工具服务器系统网络安全站长认证壁纸
加入收藏 | 网站地图 | | RSS | WAP
你好,游客 登录 注册 搜索

C#利用KeyPress和KeyDown事件拦截键盘输入及组合键

[日期:2013-05-08] 作者: 来源: [字体: ]

C#项目要求控制TextBox的输入只能为数字,但是又要保证系统常规操作可用,如Ctrl+A,Ctrl+C,Ctrl+V,Ctrl+X,Back,Delete等。这时候单纯使用KeyPress事件是不够的,要结合KeyDown事件一起来实现上述效果才可以。

        private bool nonNumberEntered = false;
        private void telTextBoxX_KeyDown(object sender, KeyEventArgs e)
        {
            nonNumberEntered = false;
            //组合键
            if (e.KeyData == (Keys.C | Keys.Control) || e.KeyData == (Keys.A | Keys.Control) || e.KeyData == (Keys.V | Keys.Control) || e.KeyData == (Keys.X | Keys.Control))
                return;
            //数字
            if (!e.Shift && e.KeyValue >= '0' && e.KeyValue <= '9')
                return;
            //星号、井号
            if (e.KeyData == (Keys.D3 | Keys.Shift) || e.KeyData == (Keys.D8 | Keys.Shift))
                return;
            //操作键
            if (e.KeyData == Keys.Back || e.KeyData == Keys.Delete || e.KeyData == Keys.Left || e.KeyData == Keys.Right)
                return;

            nonNumberEntered = true;
        }

        private void telTextBoxX_KeyPress(object sender, KeyPressEventArgs e)
        {

            if (nonNumberEntered)
                e.Handled = true;
        }

基本可以达到要求了,不过有个遗憾,就是直接通过剪切板粘贴过来的内容没有得到有效的拦截和控制。

关键词:事件  组合键  键盘  拦截  输入  KeyPress  KeyDown 

收藏 推荐 打印 | 录入:blue1000 | 阅读:
本文评论   查看全部评论 (1)
表情: 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事/刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 1 楼
* 匿名 发表于 2016/12/24 23:08:07
http://www.blue1000.com/bkhtml/c118/2011-12/70664.htm 我得到了作文 http://www.135995.com/details/zs363.html 分享作文800字 http://www.135995.com/details/zs364.html