vb.net - 有一个更好的方法吗?无需声明那些被检查为假的
问题描述
我正在创建一个医院收费菜单,如果检查它们,我将添加服务费用,如果数字向上向下的值大于 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)
解决方案
将控件的.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
推荐阅读
- css - 我如何更改 bootstrap-vue datepicker 中的填充?
- c# - 如何在 UWP 应用程序(C# 或 WinJS)中获取 Windows 10 版本(例如 1809、1903、1909...)?
- javascript - 如何使用 vue js 提醒点击元素的 id?
- c++ - 如何使用 CMake 更改构建机器类型
- git - BFG ERROR: BFG aborting: No refs to update - nodirty commits found
- flutter - 如何使用自定义布局从 Firestore 循环数据
- java - 如何获取键值并对哈希图中的值执行一些操作
- python - Python - 使用 OR 条件过滤行
- java - 如何为我的 android 锻炼应用程序进行设置?
- git - git 使用 .gitattributes 中的什么规则来确定文件类型和行尾?