Vb.net 对于带有关系运算的条件语句,是否有任何短代码方法?
我正在创建我的这个学校项目,一个洗衣店系统。 它包含许多复选框,以了解客户想要的具体服务是什么。我的问题是,是否有任何编码方法可以最小化我的条件if-elseif-endif语句 我的代码如下所示:Vb.net 对于带有关系运算的条件语句,是否有任何短代码方法?,vb.net,if-statement,checkbox,conditional-statements,Vb.net,If Statement,Checkbox,Conditional Statements,我正在创建我的这个学校项目,一个洗衣店系统。 它包含许多复选框,以了解客户想要的具体服务是什么。我的问题是,是否有任何编码方法可以最小化我的条件if-elseif-endif语句 我的代码如下所示: If chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And
If chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked And chkPants.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkJacket.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkCoat.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkBarong.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
ElseIf chkWashDryFold.Checked And chkWashDryPress.Checked And chkPressOnly.Checked And chkCoat.Checked And chkJacket.Checked And chkPolo.Checked And chkBlouse.Checked And chkSkirt.Checked And chkDress.Checked And chkGown.Checked And chkChildrens.Checked And chkStuff.Checked = True Then
'statement goes here........
End if
我的程序是当用户选中1个复选框或2个复选框或3个复选框等
我的程序的示例图像,包括几个复选框:
一种方法是进行一些重构。按位枚举的实例可用于存储每个复选框的选中状态:
<Flags()> Public Enum Laundry As Integer
WashDryFold = 1
WashDryPress = 2
PressOnly = 4
'and so on ...(doubling the value each time)
End Enum
当您准备好评估复选框时,只需从复选框中构建枚举值,并使用select块执行需要执行的操作。每个唯一的复选框组合将产生唯一的值
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
LaundrySettings = New Laundry
For Each chk As CheckBox In Me.Controls.OfType(Of CheckBox)
If chk.Checked Then
LaundrySettings = CType(LaundrySettings Or CType(chk.Tag, Laundry), Laundry)
End If
Next
Select Case CInt(LaundrySettings)
Case 1
'code here
Case 2
'code here
Case 3
'code here
'and so on ...
End Select
End Sub
万一LINQ不是一个选项,这里有一个非LINQ版本:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
LaundrySettings = New Laundry
For Each cntrl As Control In Me.Controls
If cntrl.Name.StartsWith("chk") Then
Dim chk As CheckBox = DirectCast(cntrl, CheckBox)
If chk.Checked Then
LaundrySettings = CType(LaundrySettings Or CType(cntrl.Tag, Laundry), Laundry)
End If
End If
Next
Select Case CInt(LaundrySettings)
Case 1
'code here
Case 2
'code here
Case 3
'code here
'and so on ...
End Select
End Sub
尝试使用
SELECT..CASE
语句以获得更高的可读性您在不同的分支中做了什么?每个分支之间有什么不同?感谢您的评论,我将研究并尝试@tinstaafl的答案。谢谢各位,谢谢你们的回答。。我仍然是vb.net的新手,但我会研究你给出的有趣代码。为什么每次在枚举中都要将值加倍?@Mark-因为它是按位枚举,是值的组合给出了枚举的总值。基本上与查看二进制数时相同。我在部分Me.Controls.OfType(Of CheckBox)
中遇到了问题。错误行显示类型的不是系统.Windows.Forms.Control.ControlCollection
的成员,在Me.Controls
之后,当我按(.)=(点)时,类型没有显示。谢谢。@Mark-您使用的是什么版本的visual studio?您可能必须先导入.System.Linq
。
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
LaundrySettings = New Laundry
For Each cntrl As Control In Me.Controls
If cntrl.Name.StartsWith("chk") Then
Dim chk As CheckBox = DirectCast(cntrl, CheckBox)
If chk.Checked Then
LaundrySettings = CType(LaundrySettings Or CType(cntrl.Tag, Laundry), Laundry)
End If
End If
Next
Select Case CInt(LaundrySettings)
Case 1
'code here
Case 2
'code here
Case 3
'code here
'and so on ...
End Select
End Sub