2017-02-16 21 views
0

Я полный новичок, когда дело доходит до программирования на VB.net (началось на прошлой неделе). У меня есть задание в классе, которое требует, чтобы я выполнил общее количество, используя 3 флажка.Как правильно использовать флажки для запуска общего количества в VB.net?

Я немного вычислил его. Моя основная проблема прямо сейчас заключается в том, что, когда я снимаю флажки, вычисление становится странным. До сих пор вот мой код:

Public Class frm1 
    Dim HandbagAcc As Double = 0 

    Private Sub chkBoxExtra_CheckedChanged(sender As Object, e As EventArgs) Handles chkBoxExtra.CheckedChanged 
     '$9.99 
     If chkBoxExtra.Checked = True Then 
      HandbagAcc = HandbagAcc + 9.99 
      txtBoxAcc.Text = FormatCurrency(HandbagAcc) 
     End If 
     If chkBoxExtra.Checked = False Then 
      HandbagAcc = HandbagAcc - 9.99 
      txtBoxAcc.Text = FormatCurrency(HandbagAcc) 
     End If 
    End Sub 

    Private Sub chkBoxMatching_CheckedChanged(sender As Object, e As EventArgs) Handles chkBoxMatching.CheckedChanged 
     '$7.99 
     If chkBoxExtra.Checked = True Then 
      HandbagAcc = HandbagAcc + 7.99 
      txtBoxAcc.Text = FormatCurrency(HandbagAcc) 
     End If 

     If chkBoxExtra.Checked = False Then 
      HandbagAcc = HandbagAcc - 7.99 
      txtBoxAcc.Text = FormatCurrency(HandbagAcc) 
     End If 
    End Sub 
    Private Sub chkBoxFour_CheckedChanged(sender As Object, e As EventArgs) Handles chkBoxFour.CheckedChanged 
     '$3.95 
     If chkBoxExtra.Checked = True Then 
      HandbagAcc = HandbagAcc + 3.95 
      txtBoxAcc.Text = FormatCurrency(HandbagAcc) 
     End If 

     If chkBoxExtra.Checked = False Then 
      HandbagAcc = (HandbagAcc - 3.95) 
      txtBoxAcc.Text = FormatCurrency(HandbagAcc) 
     End If 
    End Sub 
End Class 

Когда я проверяю эти три Флажков в первый раз, значения складываются хорошо - но, когда я снимите коробку или два, мои номера идут шаткими и расчет Безразлично» t добавить вверх. Что я делаю не так?

Любая помощь будет высоко оценена. Спасибо!

+1

Вы обрабатываете различные флажок события, но внутри этих обработчиков вы всегда проверить chkBoxExt ra –

+0

LOL. Ну, это неудобно. Большое вам спасибо, Про Граммер. Я такой слепой. Я должен исправить это и проспать. – Sylvie

+0

Не редактируйте этот вопрос, чтобы сообщить, что вы решили проблему. Когда вы найдете решение, вы принимаете ответ, который решил вашу проблему, или напишите свой собственный ответ, если никакой существующий ответ не охватывает его.- Для получения дополнительной информации воспользуйтесь [Tour] (http://stackoverflow.com/tour) и прочитайте [Как принимается ответ?] (Http://meta.stackexchange.com/questions/5234/how- делает-акцепторные-ан-ответ работа) –

ответ

2

Так как вы прокомментировали, вы проверили неверный флажок в двух обработчиках.

В любом случае, я хотел бы предложить некоторое улучшение кода. Если вы добавите свои цены в флажки в качестве тега, вы можете значительно сократить количество необходимого кода.

Dim HandbagAcc As Double = 0 

Private Sub AnyCheckBox_CheckChanged(sender As Object, e As EventArgs) Handles chkBoxExtra.CheckedChanged, chkBoxMatching.CheckedChanged, chkBoxFour.CheckedChanged 
    Dim currentChk As CheckBox = sender 
    Dim price As Double = currentChk.Tag 
    HandbagAcc = HandbagAcc + If(currentChk.Checked, price, -price) 
    txtBoxAcc.Text = FormatCurrency(HandbagAcc) 
End Sub 

Таким образом, добавив тег, вам не нужен отдельный обработчик для каждого из них, и можете работать все это через тот же обработчик: Handles chkBoxExtra.CheckedChanged, chkBoxMatching.CheckedChanged, chkBoxFour.CheckedChanged

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

Захватите ярлык и нажмите Double, чтобы у вас было значение для добавления/вычитания из общей суммы.

Теперь эта линия:

HandbagAcc = HandbagAcc + If(currentChk.Checked, price, -price)

Рядный If позволяет уплотнить следующее:

If currentChk.Checked Then 
    HandbagAcc += price 
Else 
    HandbagAcc -= price 
End If 

+= быть коротким способом сделать x = x + y

0

простой метод, сделать использование более гибкого имущества

REMOVE

Dim HandbagAcc As Double = 0 

ЗАМЕНЫ С

Public ReadOnly Property HandbagAcc() as Double 
    Get 
     Dim Sum As Double 
     If chkBoxExtra.Checked Then Sum += 9.99 
     If chkBoxMatching.checked Then Sum += 7.99 
     If chkBoxFour.Checked Then Sum += 3.95 
     Return Sum 
    End Get 
End Sub 

СОЗДАТЬ ЕДИНЫЙ HANDLER

Private Sub AnyCheckBox_CheckChanged(sender As Object, e As EventArgs) _ 
     Handles _ 
     chkBoxExtra.CheckedChanged, _ 
     chkBoxMatching.CheckedChanged, _ 
     chkBoxFour.CheckedChanged 

    txtBoxAcc.Text = FormatCurrency(HandbagAcc) 

End Sub