Vb.net 对于带有关系运算的条件语句,是否有任何短代码方法?

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-elseif-endif语句

我的代码如下所示:

    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