我试图满足同时检查多个复选框的所有情况。前四个'如果'语句正在设置每个复选框的值。然后我开始尝试为多个复选框执行Select-Case但它不起作用。只是想知道是否有更有效的方法来做到这一点?感谢。
If chkCut.Checked = True Then
serviceRate = 30.0
End If
If chkColour.Checked = True Then
serviceRate = 40.0
End If
If chkHighlights.Checked = True Then
serviceRate = 50.0
End If
If chkExtensions.Checked = True Then
serviceRate = 200.0
End If
Dim i As Integer
Select Case i
Case chkCut.Checked And chkColour.Checked
i = baseRate + 70.0
Case chkCut.Checked And chkHighlights.Checked
i = baseRate + 80.0
Case chkCut.Checked And chkExtensions.Checked
i = baseRate + 230.0
答案 0 :(得分:1)
您希望获得所选值的总和,因此总结所选值。
serviceRate = 0.0
If chkCut.Checked Then
serviceRate += 30.0
End If
If chkColour.Checked Then
serviceRate += 40.0
End If
' Do the same for the other checkboxes
...
表达式serviceRate += 30.0
是serviceRate = serviceRate + 30.0
的简写形式。
如果您有4个复选框,则您有2×2×2×2 = 2 4 = 16种方式检查或不检查它们。 Select Case
的一项非常乏味的任务!
顺便说一下:Select...Case Statement根据给定的值选择一个案例。这不是你想要做的。您应该使用If...Then...Else Statement语句。但是,现在已经过时了。
答案 1 :(得分:0)
我的Linq极客会做这样的事情:
子类CheckBox并添加Rate
属性:
Public Class RateCheckBox
Inherits CheckBox
Private _Rate As Decimal
Public Property Rate() As Decimal
Get
Return _Rate
End Get
Set(ByVal value As Decimal)
_Rate = value
End Set
End Property
End Class
然后在表单中,我有一个按钮点击处理程序和辅助函数,如下所示:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Rate As Decimal = CalcRate()
Label1.Text = Rate.ToString()
End Sub
Private Function CalcRate() As Decimal
Return Me.Controls.OfType(Of RateCheckBox).Where(Function(c) c.Checked).Sum(Function(c) c.Rate)
End Function
End Class
现在,当您创建表单时,可以使用自己的RateCheckBox
类而不是常规CheckBox
,并且在设计器的属性窗口中,您可以设置与每个复选框。
我喜欢这种方法的是它的可扩展性,这意味着无论您向表单添加多少个复选框,它都将始终计算出正确的数量,而无需更改计算功能。
干杯