转自:http://blog.csdn.net/simengsiyu/article/details/9168647
上次用KeyPress事件中实现textbox只能输入数字却不能复制粘贴了
1、keypress不支持组合键,所以没有办法判断Ctrl+V,把代码放到keydown或keyup里面,并允许ctrl+v组合键通过。
private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (!(Char.IsNumber((char)e.KeyValue)) && e.KeyValue != 13 && e.KeyValue != (char)8 && !(e.KeyCode==Keys.V && e.Control )) { e.SuppressKeyPress =true ; } }上面能粘贴了,但如果粘贴板中的内容含有字母或中文,那么粘贴时并不能拦截,只能拦截键盘输入的非数字。 2、 使用正则则兼容了以上两个问题using System.Text.RegularExpressions; private void textBox1_TextChanged(object sender, EventArgs e) { var reg = new Regex("^[0-9]*$"); var str = textBox1.Text.Trim(); var sb = new StringBuilder(); if (!reg.IsMatch(str)) { for (int i = 0; i < str.Length; i++) { if (reg.IsMatch(str[i].ToString())) { sb.Append(str[i].ToString()); } } textBox1.Text = sb.ToString(); textBox1.SelectionStart = textBox1.Text.Length; //定义输入焦点在最后一个字符 } }既可以粘贴了,有不包含中文