2011-12-18 2 views
0

У меня есть текстовое поле в виде сетки, созданное динамически. Мы можем получить доступ к пользовательскому вводу как текст, но как проверить, является ли текст целым типом или строковым типом?Как проверить тип данных

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.
Как проверить тип входного параметра, является ли он целым или нет?

+1

Исследовать [ 'метод TryParse'] (http://msdn.microsoft.com/en-us/library/c846ws90.aspx). Это скажет вам, можно ли преобразовать строковое значение в число. –

+0

В java у вас есть ключевое слово instanceof для проверки типа объекта. например: - Obj instanceof Integer ... Как вы проверяете тип объекта в C# – Aaraadhana

ответ

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 control, или MaskedTextBox control. Это позволяет вам не допускать ввода пользователем недопустимого ввода, что намного удобнее, чем показывать ошибку после факта.


В ответ на ваш комментарий:

в Java вы имеете InstanceOf ключевое слово для проверки типа объекта. например: - Obj InstanceOf Integer ... Как проверить для объекта типа в C#

C# имеет ключевое слово typeof, но это не поможет вам здесь. Проблема в том, что объект, который вы проверяете , является экземпляром типа String. Свойство TextTextBox класс всегда возвращает объект типа String. Это не VB 6: здесь нет Variants. Что вы проверяете, так это то, что значение String может быть преобразованным в эквивалентное интегральное представление.

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

Если строка (ваше значение текстового поля) содержит нечисловые символы или числовое значение слишком велико или слишком мало для конкретного типа вы указали, TryParse возвращает ложь и устанавливает выходной параметр равного нуля. В противном случае он возвращает true и устанавливает параметр out в числовое значение строки.

Вот ссылка с MSDN например: http://msdn.microsoft.com/en-us/library/bb384043.aspx

0

Я использую это:

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"; 

     } 
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; 

} 
Смежные вопросы