TextBox判断是否为数字

XAML代码
< TextBox Name="textBox1" DataObject.Pasting="textBox1_Pasting" PreviewKeyDown="textBox1_PreviewKeyDown" InputMethod.IsInputMethodEnabled="False" PreviewTextInput="textBox1_PreviewTextInput" / >

cs代码
 
        private void textBox1_Pasting(object sender, DataObjectPastingEventArgs e)
        {
            if (e.DataObject.GetDataPresent(typeof(String)))
            {
                String txt = (String)e.DataObject.GetData(typeof(String));
                if (!IsNumber(txt))
                {
                    e.CancelCommand(); //取消复制操作
                }
            }
            else
            {
                e.CancelCommand();
            }
        }


        private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Space)
            { e.Handled = true; }
        }


        private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if (!IsNumber(e.Text))
            {
                e.Handled = true;
            }
            else
            {
                e.Handled = false;
            }
        }


        /// <summary>
        /// 判断输入字符串是否是数字
        /// </summary>
        /// <param name="_string"></param>
        /// <returns></returns>
        public static bool IsNumber(string txt)
        {
            if (string.IsNullOrEmpty(txt))
            {
                return false;
            }
            foreach (char c in txt)
            {
                if (!char.IsDigit(c)) return false;
            }
            return true;
        }
      
        

对三个事件的解释:

1)DataObject.Pasting,避免粘贴非数字型字符,[MSDN]此事件通过调用 CancelCommand旨在提供能够为应用程序检查 DataObject 的内容粘贴操作之前,更改,移除或添加数据格式或取消整个复制操作。

2)PreviewKeyDown事件,在焦点位于此控件上的情况下,当有按键动作时发生(在 KeyDown 事件之前发生),这里主要避免空格

3)PreviewTextInput事件,[msdn]PreviewTextInput 事件允许组件或应用程序侦听文本输入与设备无关的方式。 键盘是 PreviewTextInput主要方式;,但语音、手写和其他输入设备也会PreviewTextInput。其实白话就是,在输入要输入到文本框之前做一次检查,这里当然是检查最后输入进来的是不是数字。


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值