Вычисление промежуточного итога из списка флажков в vb.net

#vb.net

#vb.net

Вопрос:

Здравствуйте, я написал следующие коды для обработки выбора флажков в форме. общая сумма должна быть увеличена на основе разрезов, а затем отображена. Кто-нибудь, пожалуйста, помогите мне, как справиться с этим. Вот как я обрабатываю выборки и пытаюсь вычислить общую сумму.

     Private Sub computeCurrentSelection()
    If chkugalis.Checked = True Then 'ugali fish selected
        orderAmt = lab.Text
        total = ugalif * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " plates of" amp; " Ugali n fish " amp; " Kshs" amp; total)
    End If

    If chkGitheri.Checked = True Then 'ugali dengu slected
        orderAmt = lab3.Text
        total = ugalid * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Ugali n dengu " amp; " Kshs" amp; total)
    End If
    If chkUgaliB.Checked = True Then 'githeri selected
        orderAmt = lab2.Text
        total = githeri * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Githeri " amp; " Kshs" amp; total)
    End If
    If chkPilau.Checked = True Then
        orderAmt = lab4.Text
        total = chapo * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Pilau " amp; " Kshs" amp; total)
    End If
    If chkPizza.Checked = True Then
        orderAmt = lab5.Text
        total = pilau * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Pizza " amp; " Kshs" amp; total)
    End If
    If chkMandazi.Checked = True Then
        orderAmt = lab6.Text
        total = pizza * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; "mandazi " amp; " Kshs" amp; total)
    End If
    If chkSamosa.Checked = True Then
        orderAmt = lab7.Text
        total = mandazi * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; "Samosa " amp; " Kshs" amp; total)
    End If
    If chkChapon.Checked = True Then
        orderAmt = lab8.Text
        total = samosa * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; "Chapati " amp; " Kshs" amp; total)
    End If
    If chkWater.Checked = True And chk300ml.Checked = True Then
        orderAmt = lab9.Text
        total = water1 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 300ml Water " amp; " Kshs" amp; total)
    End If
    If chkWater.Checked = True And chk500ml.Checked = True Then
        orderAmt = lab9.Text
        total = water2 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 500ml Water " amp; " Kshs" amp; total)
    ElseIf chkWater.Checked = True And chk1l.Checked = True Then
        orderAmt = lab9.Text
        total = water3 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 1l Water " amp; " Kshs" amp; total)
    End If
    If chkWater.Checked = True And chk2l.Checked = True Then
        orderAmt = lab9.Text
        total = water4 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 2l Water " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk300ml.Checked = True Then
        orderAmt = lab10.Text
        total = soda1 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 300ml Soda " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk500ml.Checked = True Then
        orderAmt = lab10.Text
        total = soda2 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 500ml Soda " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk1l.Checked = True Then
        orderAmt = lab10.Text
        total = soda3 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 1l Soda " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk2l.Checked = True Then
        orderAmt = lab10.Text
        total = soda4 * orderAmt
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 2l Soda " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk300ml.Checked = True Then
        orderAmt = lab11.Text
        total = juice1 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 300ml juice " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk500ml.Checked = True Then
        orderAmt = lab11.Text
        total = juice2 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 500ml juice " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk1l.Checked = True Then
        orderAmt = lab11.Text
        total = juice3 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 1l juice " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk2l.Checked = True Then
        orderAmt = lab11.Text
        total = juice4 * orderAmt
        subtotal = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 2l juice " amp; " Kshs" amp; total)
    End If
End Sub
 

Комментарии:

1. Общая сумма должна быть рассчитана из отдельных элементов чекбокса, т.е. если чкугались. Проверено = True, затем ‘угали рыбу, выбранную orderAmt = lab. Текстовый итог = ugalif * Промежуточный итог orderAmt = общий lstReceipt. Товары. Добавить (упорядочить и «тарелки», «Угали рыбу», «КШС» и всего) Завершить, если ` но промежуточный итог должен быть суммой итогов всех выбранных флажков, т.е. Если установлен только один флажок, то промежуточный итог должен быть только суммой флажков, но если выбрано более одного, то промежуточный итог должен быть суммой итогов всех выбранныхустановите флажки.

Ответ №1:

Я не уверен, правильно ли я понял, но я попробую.

Попробуйте это:

 Private Function ComputeCurrentSelection() As Integer ' not sure for data type, you decide
    Dim total As Integer
    If chkugalis.Checked = True Then 'ugali fish selected
        orderAmt = lab.Text
        total  = ugalif * orderAmt        
        lstReceipt.Items.Add(orderAmt amp; " plates of" amp; " Ugali n fish " amp; " Kshs" amp; total)
    End If

    If chkGitheri.Checked = True Then 'ugali dengu slected
        orderAmt = lab3.Text
        total  = ugalid * orderAmt
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Ugali n dengu " amp; " Kshs" amp; total)
    End If
    If chkUgaliB.Checked = True Then 'githeri selected
        orderAmt = lab2.Text
        total  = githeri * orderAmt
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Githeri " amp; " Kshs" amp; total)
    End If ...

    Return total
End Function
 

Ответ №2:

Я пробовал это

       Private Sub computeCurrentSelection()
    If chkugalis.Checked = True Then 'ugali fish selected
        orderAmt = lab.Text
        total = ugalif * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " plates of" amp; " Ugali n fish " amp; " Kshs" amp; total)
    End If

    If chkGitheri.Checked = True Then 'ugali dengu slected
        orderAmt = lab3.Text
        total = ugalid * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Ugali n dengu " amp; " Kshs" amp; total)
    End If
    If chkUgaliB.Checked = True Then 'githeri selected
        orderAmt = lab2.Text
        total = githeri * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Githeri " amp; " Kshs" amp; total)
    End If
    If chkPilau.Checked = True Then
        orderAmt = lab4.Text
        total = chapo * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Pilau " amp; " Kshs" amp; total)
    End If
    If chkPizza.Checked = True Then
        orderAmt = lab5.Text
        total = pilau * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " plates of " amp; "Pizza " amp; " Kshs" amp; total)
    End If
    If chkMandazi.Checked = True Then
        orderAmt = lab6.Text
        total = pizza * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; "mandazi " amp; " Kshs" amp; total)
    End If
    If chkSamosa.Checked = True Then
        orderAmt = lab7.Text
        total = mandazi * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; "Samosa " amp; " Kshs" amp; total)
    End If
    If chkChapon.Checked = True Then
        orderAmt = lab8.Text
        total = samosa * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; "Chapati " amp; " Kshs" amp; total)
    End If
    If chkWater.Checked = True And chk300ml.Checked = True Then
        orderAmt = lab9.Text
        total = water1 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 300ml Water " amp; " Kshs" amp; total)
    End If
    If chkWater.Checked = True And chk500ml.Checked = True Then
        orderAmt = lab9.Text
        total = water2 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 500ml Water " amp; " Kshs" amp; total)
    ElseIf chkWater.Checked = True And chk1l.Checked = True Then
        orderAmt = lab9.Text
        total = water3 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 1l Water " amp; " Kshs" amp; total)
    End If
    If chkWater.Checked = True And chk2l.Checked = True Then
        orderAmt = lab9.Text
        total = water4 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 2l Water " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk300ml.Checked = True Then
        orderAmt = lab10.Text
        total = soda1 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 300ml Soda " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk500ml.Checked = True Then
        orderAmt = lab10.Text
        total = soda2 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 500ml Soda " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk1l.Checked = True Then
        orderAmt = lab10.Text
        total = soda3 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 1l Soda " amp; " Kshs" amp; total)
    End If
    If chkSoda.Checked = True And chk2l.Checked = True Then
        orderAmt = lab10.Text
        total  = soda4 * orderAmt
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 2l Soda " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk300ml.Checked = True Then
        orderAmt = lab11.Text
        total = juice1 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 300ml juice " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk500ml.Checked = True Then
        orderAmt = lab11.Text
        total = juice2 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 500ml juice " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk1l.Checked = True Then
        orderAmt = lab11.Text
        total = juice3 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 1l juice " amp; " Kshs" amp; total)
    End If
    If chkJuice.Checked = True And chk2l.Checked = True Then
        orderAmt = lab11.Text
        total = juice4 * orderAmt
        subtotal  = total
        lstReceipt.Items.Add(orderAmt amp; " Bottles of 2l juice " amp; " Kshs" amp; total)
    End If
End Sub
 

и это сработало, но он вычисляет и сохраняет промежуточный итог, таким образом обновляя его везде, где я вызываю computeCurrentSelection() , например, если при первом вызове промежуточный итог был равен 10, попробуйте очистить предыдущий итог и обновить его следующим образом

     Private Sub updateTotal()
    lstTotal.Items.Clear()
    lstTotal.Items.Add("Sub Total =" amp; subtotal)
End Sub     
 

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