2014-02-19 3 views
3

Я работаю над программой для своего класса Visual Basic и задаю быстрый вопрос. Одна из вещей, которую мы рекомендовали сделать, - проверить, чтобы количество, введенное в текстовое поле, фактически было числом. Наш профессор предложил использовать IsNumeric для выполнения этой проверки, но у меня проблемы. У меня уже был хороший код, написанный до того, как он добавил это в инструкции, поэтому не уверен, как интегрировать его в код, который у меня уже есть.Проверка числового значения, введенного в текстовом поле в Visual Basic

Основная цель программы - предоставить пользователю возможность добавлять ингредиенты из одного списка в окно списка рецептов, вводить количество для каждого выбранного ингредиента в текстовое поле и вычислять общие калории для рецепта. Как я уже написал код, IsNumeric является частью вложенного оператора if в начале, где я начну добавлять выбранные ингредиенты в список рецептов. Я не уверен, что это правильное место.

Вот код, который я написал до сих пор.

Public Class Form1 

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click 
     Dim i As Integer = lstIngredients.SelectedIndex 
     Dim Quantity As Double 
     Dim intCount As Integer = 0 

     If Trim(txtQuantity.Text = "") Then 
      Quantity = 1 
     Else 
      Quantity = Me.txtQuantity.Text 
     End If 

     If txtQuantity.Text Is IsNumeric() Then 
      If intCount < Quantity Then 
       lstRecipe.Items.Add(Quantity & " " & lstIngredients.Text) 
       intCount += 1 
      End If 
     Else 
      MessageBox.Show("The quantity entered is not numeric. Please add a numeric quantity.") 
     End If 


    End Sub 

    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click 
     lstRecipe.Items.Clear() 
     txtQuantity.Clear() 
     txtAnswer.Clear() 
    End Sub 

    Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click 


    End Sub 
End Class 

Также, это ошибка, которую я получаю, когда пытаюсь запустить эту программу по мере ее написания.

Error 1 Argument not specified for parameter 'Expression' of 'Public Function IsNumeric(Expression As Object) As Boolean'.  

Любые предложения были бы весьма признательны.

+0

возможно дубликат [Проверка, если ввод текста окно Числовой] (HTTP: // StackOverflow.com/questions/15423114/check-to-see-if-text-box-input-is-numeric) –

ответ

12

Более правильный способ сделать это состоит в использовании метода TryParse доступных в Int32 или Double классе

If Double.TryParse(txtQuantity.Text, Quantity) Then 
    If intCount < Quantity Then 
     lstRecipe.Items.Add(Quantity & " " & lstIngredients.Text) 
      intCount += 1 
    End If 
Else 
    MessageBox.Show("The quantity entered is not numeric. Please add a numeric quantity.") 
End If 

И вы также можете удалить код, проверить на пустое текстовое поле.

Метод TryParse хочет два параметра, первый - это строка, которую можно преобразовать, второй параметр - это переменная, которая получает результат преобразования, если это возможно. Если преобразование невозможно выполнить, функция возвращает false.

Есть много причин, чтобы предпочесть Double.TryParse вместо IsNumeric.

Первая причина в том, что с TryParse вы также получаете результат преобразования, а с IsNumeric вам нужно будет сделать преобразование после проверки.

Вторая причина заключается в том, что вы могли бы дать IsNumeric любой объект, который вы хотите (также кнопка), и он принимает его. Вы бы никогда не обнаружили такие ошибки во время компиляции. Вместо этого, с TryParse, вы можете передать только строку в качестве своего первого параметра.

+0

Это предпочтительный метод (с использованием .Parse или .TryParse), потому что IsNumeric - это метод удержания VB, который не все там. Он может тестировать числовые форматы, но он не гарантирует, что значение является полностью числовым. Например, 'IsNumeric (" $ 123 ")' возвращает true, но это, очевидно, вызовет исключение, если вы попытаетесь присвоить '' $ 123 '' числовой переменной ... Без методов Parse вам придется сделать символ- по-символьной проверке. Это может быть предпочтительным, если вам необходимо обеспечить лучшую обратную связь, например, проверку пароля на сложность, но для базового численного перевода это слишком много. – ps2goat

+0

@ ps2goat абсолютно согласен. – Steve

+1

Это сработало отлично, спасибо за помощь! –

5

Вы используете функцию неправильно - вам нужно передать строку в качестве параметра.

If IsNumeric(txtQuantity.Text) Then 
+0

О, я вижу, спасибо! –

1

Используйте IsNumeric(txtQuantity.Text) если у вас этот способ определен. В противном случае используйте метод Int32.TryParse(). Он вернет true, если текст передан в число.

1

Использование Regex.IsMatch:

Public Function isNumeric(input As String) As Boolean 
    Return Regex.IsMatch(input.Trim, "\A-{0,1}[0-9.]*\Z") 
End Function 
Смежные вопросы