2017-02-16 34 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 

當我檢查了三個複選框第一次,值加起來很好 - 但是,當我取消一兩盒,我的號碼去靠不住的,計算沒有按」噸加起來。我究竟做錯了什麼?

任何幫助將不勝感激。謝謝!

+1

您處理不同的複選框的事件,但這些處理內部,你經常檢查chkBoxExt ra –

+0

哈哈。呃...這很尷尬。非常感謝Pro Grammer。我很盲目。我應該改正這一點,然後開始睡覺。 – 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 
相關問題