以下实现TextBox只能输入小数并且屏蔽中文输入和非法粘贴:
说明:以下实现均在Framework 3.0平台下
说明:以下实现均在Framework 3.0平台下
为TextBox加两个事件:TextChanged和KeyDown事件,具体如下:
KeyDown事件:
1
private 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事件
private 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
else25
{26
e.Handled = true;27
}28
}29

30

1
private 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本身是没有的
private 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

谨以此记录成长的脚步,同时和大家一起分享快乐。

浙公网安备 33010602011771号