我在winform上有四个复选框,用户必须在预定义的条件下从中选择。也就是说,如果用户选择chkbx1或chkbx2或chkbx3或chkbx4(其中任意一个),则每个选择都将显示不同的味精。
第二种情况下,用户可以选择任意两个chkbx,例如(chk1 + chkbx2,或chkbx1 + chkbx3,或chkbx1 + chkbx4),每个选择都会显示不同的味精。
第三个条件可以选择三个复选框(chkbx 1 + 2 + 3或1 + 3 + 4或1 + 2 + 4)。每个选择要显示的不同的味精
第四个条件,全部四个hv选择要在btnclck上显示味精。......用户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
答案 0 :(得分:0)
我给你一些指导。您是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种可能结果的方式可能更具可读性。实际上,这取决于盒子的含义。第一个示例使用了与numeric file system permissions类似的逻辑,因此在某些系统中,这种方式可能会更容易,而如果您必须展示的每个组合都无法系统化,那么您可能会更爱另一个。
祝你好运,玩得开心!