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;
            }
        }


        /// 
        /// 判断输入字符串是否是数字
        /// 
        /// 
        /// 
        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。其实白话就是,在输入要输入到文本框之前做一次检查,这里当然是检查最后输入进来的是不是数字。


 

你可能感兴趣的:(WPF)