以下实现TextBox只能输入小数并且屏蔽中文输入和非法粘贴:
说明:以下实现均在Framework 3.0平台下
说明:以下实现均在Framework 3.0平台下
为TextBox加两个事件:TextChanged和KeyDown事件,具体如下:
KeyDown事件:
1private void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
2 {
3 TextBox txt = sender as TextBox;
4
5 //屏蔽非法按键
6 if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal)
7 {
8 if (txt.Text.Contains(".") && e.Key == Key.Decimal)
9 {
10 e.Handled = true;
11 return;
12 }
13 e.Handled = false;
14 }
15 else if (((e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod) && e.KeyboardDevice.Modifiers != ModifierKeys.Shift)
16 {
17 if (txt.Text.Contains(".") && e.Key == Key.OemPeriod)
18 {
19 e.Handled = true;
20 return;
21 }
22 e.Handled = false;
23 }
24 else
25 {
26 e.Handled = true;
27 }
28 }
29
30
TextChanged事件2 {
3 TextBox txt = sender as TextBox;
4
5 //屏蔽非法按键
6 if ((e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal)
7 {
8 if (txt.Text.Contains(".") && e.Key == Key.Decimal)
9 {
10 e.Handled = true;
11 return;
12 }
13 e.Handled = false;
14 }
15 else if (((e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod) && e.KeyboardDevice.Modifiers != ModifierKeys.Shift)
16 {
17 if (txt.Text.Contains(".") && e.Key == Key.OemPeriod)
18 {
19 e.Handled = true;
20 return;
21 }
22 e.Handled = false;
23 }
24 else
25 {
26 e.Handled = true;
27 }
28 }
29
30
1private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
2 {
3 //屏蔽中文输入和粘贴输入
4 TextBox textBox = sender as TextBox;
5 TextChange[] change = new TextChange[e.Changes.Count];
6 e.Changes.CopyTo(change, 0);
7
8 int offset = change[0].Offset;
9 if (change[0].AddedLength > 0)
10 {
11 double num = 0;
12 if (!Double.TryParse(textBox.Text, out num))
13 {
14 textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
15 textBox.Select(offset, 0);
16 }
17 }
18 }
19
20
值得注意的是TextChange类,是Framework 3.0SP1和3.5中新增的,3.0本身是没有的
2 {
3 //屏蔽中文输入和粘贴输入
4 TextBox textBox = sender as TextBox;
5 TextChange[] change = new TextChange[e.Changes.Count];
6 e.Changes.CopyTo(change, 0);
7
8 int offset = change[0].Offset;
9 if (change[0].AddedLength > 0)
10 {
11 double num = 0;
12 if (!Double.TryParse(textBox.Text, out num))
13 {
14 textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
15 textBox.Select(offset, 0);
16 }
17 }
18 }
19
20
谨以此记录成长的脚步,同时和大家一起分享快乐。