如何检查数据类型

时间:2011-12-18 14:57:39

标签: c# textbox

我在动态创建的网格视图中有一个文本框。我们可以作为文本访问用户输入,但是如何检查文本是整数类型还是字符串类型?

if (tx.Text == "")
{
    tx.Text = Convert.ToString(0);
}
if (Convert.ToInt32(tx.Text) > max)
{
    MessageBox.Show("Some Message", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
    tx.Text = Convert.ToString(max);
}

tx是我们通过tx.Text从中访问用户输入的文本框 如何检查输入参数的类型是否为整数?

4 个答案:

答案 0 :(得分:6)

您正在寻找TryParse method。这将告诉您是否可以将给定的字符串值转换为数字。它可以做到这一切而不会抛出任何例外。

示例代码:

  int number;
  bool result = Int32.TryParse(tx.Text, out number);
  if (result)
  {
      // Conversion to a number was successful.
      // The number variable contains your value.        
  }
  else
  {
     // Conversion to a number failed.
     // The value entered in the textbox is not numeric.
  }

但是如果您希望限制文本框的输入范围(即,阻止用户输入除数字之外的任何内容),这不是正确的方法。

相反,您应该使用其他控件,例如NumericUpDown controlMaskedTextBox control。这些允许您防止用户首先输入无效输入,这比事后显示错误更加用户友好。


回应你的评论:

  

在java中你有instanceof关键字来检查对象类型。例如: - Obj instanceof Integer ...如何在C#中检查对象类型

C#有typeof个关键字,但这不会对你有所帮助。问题是,您正在检查的对象是类型为String的实例。 Text始终TextBox属性返回String类型的对象。这不是VB 6:这里没有Variants。您要检查的是String值是否可以转换到等效的整数表示中。

答案 1 :(得分:1)

我用这个:

 private dataType ParseString(string str)
        {
            bool boolValue;
            Int32 intValue;
            Int64 bigintValue;
            decimal doubleValue;
            DateTime dateValue;

            // Place checks higher in if-else statement to give higher priority to type.

            if (bool.TryParse(str, out boolValue))
                return "System_Boolean";
            else if (Int32.TryParse(str, out intValue))
                return "System_Int32";
            else if (Int64.TryParse(str, out bigintValue))
                return "System_Int64";
            else if (decimal.TryParse(str, out doubleValue))
                return "System_Decimal";
            else if (DateTime.TryParse(str, out dateValue))
                return "System_DateTime";
            else return "System_String";

        }

答案 2 :(得分:0)

int intNumber;    
bool result=int.TryParse(txt.Text, out intNumber)

如果字符串(您的文本框值)包含非数字字符,或者数值对于您指定的特定类型而言太大或太小,TryParse将返回false并将out参数设置为零。否则,它返回true并将out参数设置为字符串的数值。

以下是带有示例的msdn链接:http://msdn.microsoft.com/en-us/library/bb384043.aspx

答案 3 :(得分:0)

我认为以下方法更简单。您只需要设置一个使用textBox检查操作的方法:

private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((e.KeyChar >= '0') && (e.KeyChar <= '9'))
    {

        return;
    }

    if (Char.IsControl(e.KeyChar))
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            Button1.Focus ();
        }
    }
  e.Handled = true;

}