首页 > 解决方案 > 需要四个复选框的代码,显示十种不同条件的味精

问题描述

我在 winform 上有四个复选框,用户必须在预定义的条件下从中选择。也就是说,如果用户选择 chkbx1 或 chkbx2 或 chkbx3 或 chkbx4(其中任何一个),则每个选择都有不同的消息要显示。

第二个条件用户可以选择任意两个 chkbx 例如(chk1 +chkbx2,或 chkbx1+chkbx3,或 chkbx1+chkbx4),每个选择 hv 不同的消息显示。

第三个条件可以选择任意三个复选框(chkbx 1+2+3 或 1+3+4,或 1+2+4)。每个选择 hv 不同的 msg 来显示

第四个条件所有四个 hv 都选择在 btnclck 上显示 msg.......用户 hv 必须选择至少一个复选框

我正在做if else statement

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If CheckBox1.Checked = True Then
        MessageBox.Show("U choose 1")
    End If
    If CheckBox2.Checked = True Then
        MessageBox.Show("U choose 2")
        If CheckBox3.Checked = True Then
            MessageBox.Show("U choose 3")
            If CheckBox4.Checked = True Then
                MessageBox.Show("U choose 4")
                If CheckBox1.Checked = True Then
                    CheckBox4.Checked = True
                    MessageBox.Show("U choose 5")
                    If CheckBox2.Checked = True Then
                        CheckBox4.Checked = True
                        MessageBox.Show("U choose 6")

                        If CheckBox1.Checked = True Then
                            CheckBox4.Checked = True
                            CheckBox2.Checked = True
                            MessageBox.Show("U choose 7")
                            If CheckBox1.Checked = True Then
                                CheckBox4.Checked = True
                                CheckBox3.Checked = True

                                MessageBox.Show("U choose 8")
                                If CheckBox3.Checked = True Then
                                    CheckBox4.Checked = True
                                    CheckBox2.Checked = True
                                    MessageBox.Show("U choose 9")
                                    If CheckBox1.Checked = True Then
                                        CheckBox4.Checked = True
                                        CheckBox2.Checked = True
                                        CheckBox3.Checked = True
                                        MessageBox.Show("U choose 10")
                                    ElseIf CheckBox1.Checked = False Then
                                        CheckBox4.Checked = False
                                        CheckBox2.Checked = False
                                        CheckBox3.Checked = False
                                        MessageBox.Show("select any one")

                                    End If

                                End If

                            End If



                        End If
                    End If
                End If
            End If
        End If
    End If
End Sub

End Class

在关闭 msgbx 时显示另一个 msg 并自动选择其他 chkbxss

标签: vb.net

解决方案


我会给你一些指示。你是CS学生吗?如果是这样,您会欣赏我的提议包含一些二进制计算。你看,你有 4 个复选框,这意味着你有 4² 种不同的可能结果。使用嵌入式这样做If会很糟糕。另一方面,您可以在用户完成复选框的操作时计算您正在查找的结果。你可以随心所欲地这样做。以下是实现此目的的两种方法:

Private Sub ShowResult()
    Select Case GetCheckboxesTotal()
        Case 0
            MessageBox.Show("0")
        Case 1
            MessageBox.Show("1")
        Case 2
            MessageBox.Show("2")
        Case 3
            '...
        Case 14
            MessageBox.Show("14")
        Case 15
            MessageBox.Show("15")
    End Select
End Sub

Private Function GetCheckboxesTotal() As Integer
    Dim total As Integer = 0
    If CheckBox1.Checked Then total += 1
    If CheckBox1.Checked Then total += 2
    If CheckBox1.Checked Then total += 4
    If CheckBox1.Checked Then total += 8

    Return total
End Function

该解决方案利用了二进制数学的力量!在这个答案中,每个复选框都是一个“位”,并且该GetCheckboxesTotal()函数计算用户检查的确切组合,从没有复选框 (0) 到所有复选框 (15)。请注意,如前所述,这产生了 16 种不同的可能性,您可以很好地解决这些可能性,Select Case其中每种可能性都以非常易读的方式处理一次。

现在,如果您不喜欢这个答案的数学部分怎么办?不用担心,朋友,有一个非常非常简单的方法可以再次处理这个问题:

Private Sub ShowResult()
    Select Case True
        Case Not CheckBox1.Checked AndAlso Not CheckBox2.Checked AndAlso Not CheckBox3.Checked AndAlso Not CheckBox4.Checked
            MessageBox.Show("0")
        Case CheckBox1.Checked AndAlso Not CheckBox2.Checked AndAlso Not CheckBox3.Checked AndAlso Not CheckBox4.Checked
            MessageBox.Show("1")
        Case Not CheckBox1.Checked AndAlso CheckBox2.Checked AndAlso Not CheckBox3.Checked AndAlso Not CheckBox4.Checked
            MessageBox.Show("2")
        Case CheckBox1.Checked AndAlso CheckBox2.Checked AndAlso Not CheckBox3.Checked AndAlso Not CheckBox4.Checked
            '...
        Case Not CheckBox1.Checked AndAlso CheckBox2.Checked AndAlso CheckBox3.Checked AndAlso CheckBox4.Checked
            MessageBox.Show("14")
        Case CheckBox1.Checked AndAlso CheckBox2.Checked AndAlso CheckBox3.Checked AndAlso CheckBox4.Checked
            MessageBox.Show("15")
    End Select
End Sub

这种处理 16 种可能结果的方式可能更具可读性。事实上,这取决于你的盒子是什么意思。第一个示例使用与数字文件系统权限类似的逻辑,因此对于某些系统,这种方式可能更容易,而如果您必须显示的每个组合都无法系统化,那么您可能会更喜欢另一个组合。

祝好运并玩得开心点!


推荐阅读