自定义控件textbox只输入数字

翻译|其它|编辑:郝浩|2007-10-18 10:37:06.000|阅读 1662 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

以前从来没有写日志的习惯,可是突然发现有些东西是要记录的。
当我有要记录读这本书的时候,很不幸我已经到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 代表从键盘输入的值


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP