自定义控件textbox只输入数字

来源:互联网 发布:支付宝知托付官网登录 编辑:程序博客网 时间:2024/05/17 01:20
以前从来没有写日志的习惯,可是突然发现有些东西是要记录的。
当我有要记录读这本书的时候,很不幸我已经到120页了。要是把以前读过的记下来有多好,这样可以想起很多有用的技术。不过现在开始。也不晚。


        protected override bool ProcessKeyEventArgs(ref Message m)
        {
            int keyValue = m.WParam.ToInt32();
            // (keyValue > 47 && keyValue <58) ?Numbers 0 ?9
            // keyValue == 46 - Decimal point
            // (keyValue > 34 && keyValue <41) ?Home, End, and Arrow Keys
            // keyValue == 8 ?Backspace Key
            if ((keyValue > 47 && keyValue <58) || keyValue == 46 || (keyValue > 34 && keyValue <41) || keyValue == 8)
            {
                return base.ProcessKeyPreview(ref m);
            }
            else
            {
                // Delete Key
                if (m.Msg == 256 && keyValue == 46)
                {
                    return base.ProcessKeyPreview(ref m);
                }
                // Windows message id used to limit 1 beep per keystroke
                if (m.Msg == 258)
                {
                    MessageBeep(0);
                }
                return true;
            }
        }

   这里要说明几点:

(1):为了能够在用户输入错误的类型时发出“嘟”声。用到了windows API ,引用user32.dll库并声明外部方法。messageBeep,该访求中的unit 参数是无符号的整数,它来决定系统播放的波形文件。十六进制表示。

H0:系统默认的声音

H40:system asterisk

还有其它的参数,不记了以后找到手册查


[DllImport("user32.dll")]
 private static extern bool MessageBeep(uint uType);

2:在顶部那个方法是重写了TextBox中的PreProcessMessage  方法,当然textbox是从Control继承来的。

3:KeyValue代表从键盘输入的值,



 

 

原创粉丝点击