今天上午纠结一个问题很久,silverlight TextBox限制用户规则输入,要求只能输入正整数或则小数,小数点只能有且只有一个
刚开始的时候就是想直接用keyDown事件里面来解决
voidtxtParData_KeyDown(objectsender, KeyEventArgse) {
TextBoxtxt=senderasTextBox;
if (txt.Text.Length>=10) {
e.Handled=true;
}else
{
//屏蔽非数字按键,只能输入小数,e.handled为true时代表没有录入,为false时代表已录入
if ((e.Key>=Key.NumPad0&&e.Key<=Key.NumPad9) || (e.Key>=Key.D0&&e.Key<=Key.D9) ||e.Key==Key.Unknown||e.Key==Key.Decimal) {
if (txt.Text.Contains(".") &&e.Key==Key.Decimal) {
e.Handled=true;
return;
}
e.Handled=false;
}
else{
e.Handled=true;
}
}
}
发现这个根本不能满足要求,于是去找各种正则,进行匹配,依然不够好,纠结半天,最后老大一个点子,说这个可以再TextChanged 进行解决,才发现自己绕了很多弯路,代码
voidtxtParData_TextChanged(objectsender, TextChangedEventArgse) {
if ((senderasTextBox).Text.Length>0 ) {
doublesPEED;
if (!Double.TryParse((senderasTextBox).Text,outsPEED)||(senderasTextBox).Text.Length>10) {
(senderasTextBox).Text= (senderasTextBox).Text.Substring(0, (senderasTextBox).Text.Length-1);
(senderasTextBox).SelectionStart= (senderasTextBox).Text.Length;
}
}
}
Double.TryParse//将数字的字符串表示形式转换为它的等效双精度浮点数。一个指示转换是否成功的返回值。
今天第一次用,发现这个真是一个好东东,轻易解决我纠结2个多小时的东西。。。
学艺不精,不懂的太多了,慢慢学,一点点进步...