2014-02-20 2 views
0

Прежде чем это будет помечено, позвольте мне признать, что он довольно похож на вопрос, который я задал пару дней назад, о нескольких других проблемах, но после использования ответов на обе проблемы, которые у меня были, Теперь я столкнулся с другой проблемой. Кроме того, не уверен, что название действительно соответствует проблеме, которую я имею, но похоже, что это может быть проблема того, как код упорядочен в программе.Инкремент в Visual Basic

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

  1. Если текстовое поле количества осталось пустым, программа должна по умолчанию добавить 1 из выбранного ингредиента.
  2. Если в текстовое поле введено что-либо, кроме номера, программа должна отображать окно сообщения, в котором пользователь должен указать числовое количество.

Моя основная проблема заключается в том, что независимо от того, как я пытаюсь настроить код, чтобы он работал, я не могу заставить TotalCalories увеличиваться, поэтому он продолжает давать мне значение 0 в качестве ответа. Я как бы нахожусь вовремя, поэтому, если это возможно, исправить это, не переписывая большую часть кода, который у меня уже есть, это было бы здорово.

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

Public Class Form1 

    Private TotalCalories As Integer = 0 

    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 IsNumeric(txtQuantity.Text) = False Then 
      MessageBox.Show("The quantity entered is not numeric. Please add a numeric quantity.") 
     End If 

     If intCount < Quantity Then 
      lstRecipe.Items.Add(Quantity & " " & lstIngredients.Text) 
      intCount += 1 
     End If 

     If lstRecipe.Text = "Eggs(each)" Then 
      TotalCalories += Quantity * 72 
     ElseIf lstRecipe.Text = "Flour(cups)" Then 
      TotalCalories += Quantity * 455 
     ElseIf lstRecipe.Text = "Milk(cups)" Then 
      TotalCalories += Quantity * 86 
     ElseIf lstRecipe.Text = "Sugar(cups)" Then 
      TotalCalories += Quantity * 774 
     ElseIf lstRecipe.Text = "Butter(tablespoons)" Then 
      TotalCalories += Quantity * 102 
     End If 
    End Sub 

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

    Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click 
     txtAnswer.Text = TotalCalories 

    End Sub 
End Class 

Я также попытался это с помощью Если lstRecipe.text = (Количество & "" & "Яйца" & "" "(каждый)") Тогда ... Но это тоже не сработало.

+0

Внутри ' Если IsNumeric (txtQuantity.Text) = False Затем 'block, после строки' MessageBox.Show', введите следующую строку 'Exit Sub'. – rskar

+0

'intCount' здесь ничего не делает,' intCount Plutonix

+0

Спасибо за помощь. Я исправил исходную проблему в окне сообщения, отображая, когда поле количества осталось пустым благодаря сочетанию комментариев и ответа ниже. Я понимаю, что вы имеете в виду @Plutonix, я неправильно читаю инструкции, когда я впервые начал работать над этим, и думал, что мы должны добавить элемент в список определенное количество раз, исходя из того, что было введено в количестве, например, если бы они были выбраны яйца, и положить количество 3, я имел его добавить яйца три раза, а не «3 яйца», как это написано сейчас. Поэтому спасибо, что указали, что мне больше не нужен счетчик. –

ответ

1

Если txtQuantity пуст, у вас есть переменная Quantity, равная 1, иначе попробуйте разобрать введенное значение и вернуть, если это не число. Также используйте все целые числа для calc или, если допустимо десятичное значение, затем используйте double также для переменной TotalCalories.

Еще не ясно, что вы хотите делать, если пользователь ноль в текстовое поле

Private TotalCalories As Double = 0 

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 if Not Double.TryParse(txtQuantity.Text, Quantity) 
     MessageBox.Show("The quantity entered is not numeric. Please add a numeric quantity.") 
     Return ' or Exit Sub 
    End If 

    If intCount < Quantity Then 
     lstRecipe.Items.Add(Quantity & " " & lstIngredients.Text) 
     intCount += 1 
    End If 

    If lstRecipe.Text = "Eggs(each)" Then 
     TotalCalories += (Quantity * 72) 
    ElseIf lstRecipe.Text = "Flour(cups)" Then 
     TotalCalories += (Quantity * 455) 
    ElseIf lstRecipe.Text = "Milk(cups)" Then 
     TotalCalories += (Quantity * 86) 
    ElseIf lstRecipe.Text = "Sugar(cups)" Then 
     TotalCalories += (Quantity * 774) 
    ElseIf lstRecipe.Text = "Butter(tablespoons)" Then 
     TotalCalories += (Quantity * 102) 
    End If 
End Sub 

Однако я думаю, что вам нужно проверить против lstIngredients вместо

If lstIngredients.Text = "Eggs(each)" Then 
     .... 
+0

Большое вам спасибо, что исправил мою проблему! Теперь единственная проблема, с которой я сталкиваюсь, заключается в том, что счетчик калорий на самом деле ничего не вычисляет. Единственный ответ, который появляется, - 0. Любые идеи? –

+0

Я думаю, что ни одно из ваших тестов не приведет к истинному состоянию, и поэтому TotalCalories никогда не увеличивается. Если все ваши элементы в спискеRecipe являются тем, который вы добавляете, каждый элемент - это что-то вроде «Number Name_of_ingredient», и вы ничего не можете сопоставить. Вы хотите проверить вместо «lstIngredients»? – Steve

+0

Честно говоря, я не уверен. Весь смысл программы заключается в том, чтобы пользователь добавлял элементы из lstIngredients в lstRecipe и вводил количество в текстовое поле и вычислял калории на основе того, какие элементы и количества каждого из них находятся в поле lstRecipe. Так что мне нужно написать это как-то вроде If lstRecipe.text = Quantity + "Eggs (each)" Then ...? –