首页 > 解决方案 > 有一个更好的方法吗?无需声明那些被检查为假的

问题描述

我正在创建一个医院收费菜单,如果检查它们,我将添加服务费用,如果数字向上向下的值大于 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)

标签: vb.net

解决方案


将控件的.Minimum属性设置NumericUpDown为 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

您的 Calculate 方法不需要循环。只需检查哪些框被选中并计算。

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

推荐阅读