Vb.net 有更好的方法吗?而不必声明那些被检查的是假的

Vb.net 有更好的方法吗?而不必声明那些被检查的是假的,vb.net,Vb.net,我正在创建一个“医院费用”菜单,我正在添加服务费用,如果它们被选中,并且在另一个菜单中,如果数字上下的值大于1。但是我想留下那些被检查过的,并且做所有的求和,如果我不声明那些被检查过的为假,循环将保持无限 Do While (chkMedicine.Checked Or chkRehab.Checked Or chkSurgery.Checked Or chkRehab.Checked) If (chkMedicine.Checked) Then

我正在创建一个“医院费用”菜单,我正在添加服务费用,如果它们被选中,并且在另一个菜单中,如果数字上下的值大于1。但是我想留下那些被检查过的,并且做所有的求和,如果我不声明那些被检查过的为假,循环将保持无限

Do While (chkMedicine.Checked Or chkRehab.Checked Or chkSurgery.Checked Or chkRehab.Checked)

            If (chkMedicine.Checked) Then
                chkMedicine.Checked = False
                If (nudMedicine.Value > 0) Then
                    TotMed = +Medicine * nudMedicine.Value
                Else

                    TotMed = +Medicine
                End If
            ElseIf (chkSurgery.Checked) Then
                chkSurgery.Checked = False
                If (nudSurgery.Value > 0) Then
                    TotSurg = +Surgery * nudSurgery.Value
                Else
                    TotSurg = +Surgery
                End If

            ElseIf (chkLabs.Checked) Then
                chkLabs.Checked = False
                If (nudLabs.Value > 0) Then
                    TotLabs = +Labs * nudLabs.Value
                Else

                    TotLabs = +Labs
                End If
            ElseIf (chkRehab.Checked) Then
                chkRehab.Checked = False
                If (nudPhysRehab.Value > 0) Then
                    TotRehab = +PhysicalRehab * nudPhysRehab.Value
                Else

                    TotRehab = +PhysicalRehab
                End If
            End If

        Loop
        TotalServices = (TotMed + TotSurg + TotLabs + TotRehab)

由于可以检查多个项目,请删除
ElseIf
s并将其更改为所有单独的
If
语句。这样,您将为每个选中的块输入块

此外,您的代码没有按照您认为的那样执行,因为
+
应该在
=
之前,而不是之后。你写的方式是替换总数,而不是增加总数

If (chkMedicine.Checked) Then
    chkMedicine.Checked = False
    If (nudMedicine.Value > 0) Then
        TotMed += Medicine * nudMedicine.Value
    Else

        TotMed += Medicine
    End If
End If

If (chkSurgery.Checked) Then
    chkSurgery.Checked = False
    If (nudSurgery.Value > 0) Then
        TotSurg += Surgery * nudSurgery.Value
    Else
        TotSurg += Surgery
    End If
End If

If (chkLabs.Checked) Then
    chkLabs.Checked = False
    If (nudLabs.Value > 0) Then
        TotLabs += Labs * nudLabs.Value
    Else
        TotLabs += Labs
    End If
End If

If (chkRehab.Checked) Then
    chkRehab.Checked = False
    If (nudPhysRehab.Value > 0) Then
        TotRehab += PhysicalRehab * nudPhysRehab.Value
    Else

        TotRehab += PhysicalRehab
    End If
End If

NumericUpDown
控件的
.Minimum
属性设置为1,这样就不必检查0的值

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'You would probably want to set these properties at design time
    nudMedicine.Minimum = 1
    nudSurgery.Minimum = 1
    nudLabs.Minimum = 1
    nudPhysRehab.Minimum = 1
End Sub
每次复选框更改或向上/向下更改时,都将调用您的计算方法。这是通过编写一个与匹配事件过程具有相同签名的方法并在Handles子句中包含控件来实现的

Private Sub AnyCheckBoxChanged(sender As Object, e As EventArgs) Handles chkMedicine.CheckedChanged, chkRehab.CheckedChanged, chkSurgery.CheckedChanged, chkLabs.CheckedChanged
    CalculateCharges()
End Sub

Private Sub AnyNumericUpDownValueChanged(sender As Object, e As EventArgs) Handles nudMedicine.ValueChanged, nudSurgery.ValueChanged, nudLabs.ValueChanged, nudPhysRehab.ValueChanged
    CalculateCharges()
End Sub
您的计算方法不需要循环。只需选中选中的复选框并进行计算

Private Sub CalculateCharges()
    Dim TotMed As Decimal
    Dim Medicine As Decimal = CDec(25.0)
    Dim TotSurg As Decimal
    Dim Surgery As Decimal = CDec(1000)
    Dim TotLabs As Decimal
    Dim Labs As Decimal = CDec(200)
    Dim TotRehab As Decimal
    Dim PhysicalRehab As Decimal = CDec(300)
    Dim TotalServices As Decimal
    If chkMedicine.Checked Then
        TotMed = Medicine * nudMedicine.Value
    End If
    If chkSurgery.Checked Then
        TotSurg = Surgery * nudSurgery.Value
    End If
    If chkLabs.Checked Then
        TotLabs = Labs * nudLabs.Value
    End If
    If chkRehab.Checked Then
        TotRehab = PhysicalRehab * nudPhysRehab.Value
    End If

    TotalServices = TotMed + TotSurg + TotLabs + TotRehab
End Sub

现在还不清楚为什么要使用循环。是的,刚才看到了错误,我将循环用于获取所有的总和,因为我忘了在函数末尾添加
TotalServices=(TotMed+TotSurg+TotLabs+TotRehab)
。如果我删除了循环,它也会这样做,并且保持选中的那些未被触及。删除了while循环,它没有添加所有的服务,它只是添加了一个。为什么不将数值的最小值设置为1?这样,您就不再需要检查这些值并简化您的决策