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