在练手的小程序中,需要输入数字作为一个运算参数。键盘输入的数字在程序中相当于字符串,需要进行转化。所以就想像计算器那样,只能显示输入的数字字符和小数点字符。
这就需要用到一点正则表达式和text文本编辑的行为属性。
首先,在选择的text文本框中,选择”KeyPress“行为。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar >= 'a' && e.KeyChar <= 'z') || (e.KeyChar >= 'A' && e.KeyChar <= 'Z')
|| (e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar == 8) || e.KeyChar == '.')
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
其次,添加使用正则表达式的命名空间。
在开头的位置,加入
using System.Text.RegularExpressions;
然后双击文本框,进入编辑textchanged。
var reg = new Regex("^[0-9]*(\\.)?[0-9]*$"); 这里首次使用正则表达式。
Regex()表示正则表达式的新实例,""中的内容为表达式过滤或选择的内容
^表示开始位置,$表示结束
[0-9]表示第一位是数字0-9;*表示*号前的表达式若干次;
”\\.“其实是选择小数点。因为”.“在正则表达式中表示任意字符,需要加”\“进行标注,而”\“本身也是有特殊意义的,所以就需要”\\.“。后面的?表示?号前的项目0次或1次。
之后的[0-9]*与一开始的相同。
public void textBox1_TextChanged(object sender, EventArgs e)//质量
{
var reg = new Regex("^[0-9]*(\\.)?[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());
}
}//遍历输入的字符串,将符合要求的字符加入新建的sb字符串中
textBox1.Text = sb.ToString();//令文本框中的文本为符合我要求的文本
textBox1.SelectionStart = textBox1.Text.Length;
}
}
textbox1文本框就只能输入数字字符了。