分享

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

 长江黄鹤 2015-01-19

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  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多