在平时的开发中对输入的限制常常用到,这里列举一种限制只能输入数字类型的,还有很多方法,希望大家补充!
例:限制在输入框中只输入数字,负号,小数点,删除键,退格键.
方法一:
private void textBox1_TextChanged(object sender, EventArgs e)

{
int ascii;
for (int i = 0; i < textBox1.Text.Length; i++)

{
ascii = textBox1.Text[i];
if (!((ascii > 47 && ascii < 57) || ascii == 45 || ascii==46))

{
textBox1.Text = textBox1.Text.Remove(i, 1);
}
}
}
原理:最原始的办法,直接对输入的内容进行检查,负号的ascii码为45, 点为46, 0~9为48~57
点评:效率底,输入其他的字符时,光标会移到第一位,不能判别负号只能在第一位
方法二:
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)

{
int ascii = e.KeyChar;
if (!((ascii > 47 && ascii < 57) || ascii == 45 || ascii == 46||ascii==8))

{
e.Handled = true;
}
}
原理:同方法一,直接对当前按下的键值进行检查,退格键为8
点评:效率较方法一有所提高,最普遍采用的方法,依然不能判别负号只能在第一位
方法三:
using System.Text.RegularExpressions;

public bool IsNumeric(string itemValue)

{
try

{
Regex numRegex = new Regex(@"^\d+$");
//Regex numRegex=new Regex(@"^(-?[0-9]*[.]*[0-9]*)$");
Match Result = numRegex.Match(itemValue);
if (Result.Success)

{ return true; }
else

{ return false; }
}
catch (FormatException ex)

{
return false;
}
catch (Exception ex)

{
return false;
}
}

private void textBox3_Leave(object sender, EventArgs e)

{
if (!IsNumeric(textBox3.Text))

{
textBox3.Focus();
MessageBox.Show("只能为数字!");
}
}

原理:利用正则表达式和异常处理
点评:灵活性大,可很容易的移植到其他的类型,不能实时判断,只能一次判断整个字符串,try...catch语句效率不高,不过可以不放在try...catch语句里
方法四:
public bool IsNumeric(string str)

{
bool b = true;
foreach (char c in str)

{
b = Char.IsNumber(c);
if (b != true)
return false;
}
return true;
}
原理:改写IsNumeric方法,只能用于数字字符串,不能用于数值型
点评:简单,用于特定
方法五:
Regex.IsMatch(Request.Form["text1"], "^\\d+$")
原理:同方法三
点评:方法三的简写,简单,灵活
方法六:
protected bool IsNumeric(string TestString)


{
string SpecSign="0123456789";
for(int i=0;i<TestString.Length;i++)

{
while(SpecSign.IndexOf(TestString[i])==-1)
return false;
}
return true;
}
原理:同方法四
点评:效率差
方法七:
public bool IsNumeric2(string str)

{
try

{
//int.Parse(str);
float.Parse(str);
return true;
}
catch (Exception ex)

{
return false;
}
}
原理:利用转化异常
点评:可以直接判断输入的是否为某一类型
推荐:
方法二,方法七和正则表达式