' Visual Basic
Private Sub TextBox1_Validating(ByVal Sender As Object, ByVal e As CancelEventArgs) Handles TextBox1.Validating 
   If Not IsNumeric(TextBox1.Text) Then
      ErrorProvider1.SetError (TextBox1, "Not a numeric value.")
   Else
      ' Clear the error.
      ErrorProvider1.SetError (TextBox1, "")
   End If
End Sub// C#
protected void textBox1_Validating (object sender, CancelEventArgs e)
{
   try 
   {
      int x = Int32.Parse(textBox1.Text);
      errorProvider1.SetError(textBox1, "");
   }
   catch 
   {
      errorProvider1.SetError(textBox1, "Not an integer value.");
   }
}连microsoft都这么写,你还能想出什么办法吗?

解决方案 »

  1.   

    Microsoft.VisualBasic.Information.IsNumeric()
      

  2.   

    强制转化为dobule类型的数字,然后捕获异常,有异常就说明不是符合要求的数。
    或者使用vb.net(vb里面也有)的IsNumeric,如果在c#里面使用,需要添加对Microsoft.VisualBasic的引用。使用的方法:Microsoft.VisualBasic.Information.IsNumeric(this.txtID.Text))
      

  3.   

    利用Char.IsNumber(string, int)来自己写一个就OK啦
      

  4.   

    as 运算符用于执行可兼容类型之间的转换。as 运算符用在以下形式的表达式中:
    as 运算符类似于类型转换,所不同的是,当转换失败时,as 运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:
    expression as type
    等效于:
    expression is type ? (type)expression : (type)null
    只是 expression 只被计算一次。
    请注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来代替其执行。
      

  5.   

    一开始我也是用int.parase来捕捉异常,但速度太慢(出错的时候),而 as 关键字不能用在值类型中,后来我用numberic控件来解决这一问题,可以较好地解决输入错误问题,速度也快。