首页 > 解决方案 > 当 x 个复选框被选中时,对其余的做 x

问题描述

在此处输入图像描述

大家好,所以我无法弄清楚如何检查 GroupBox 中名为“Toppings”的 3 个复选框是否被选中。我必须这样做,以便在检查不同大小的比萨饼时,它会在总数中增加一定的数量,但我可以尝试自己弄清楚。我想出了如何让它工作,但它不是通用的,所以所有的复选框都可以使用它。

If CheckBox1.Checked = True Then
    lblTest.Text = 1
Else
    If lblTest.Text <= 0 Then
        lblTest.Text = 0
    Else
        lblTest.Text -= lblTest.Text
    End If
End If

标签的使用只是为了测试目的,看看我是否可以在检查和取消检查时将其设置为 3 并返回到 0。我想要一个方法去检查复选框中的变化并将1添加到一个名为TopNum的变量中。因此,当它达到 3 时,它会打开一个名为 fTop 的布尔值,因此之后的每个其他复选框都会被添加到总数中。然后,这可以帮助我弄清楚如何将它应用于比萨大小,通过添加一个乘数来赋予它不同的浇头价格金额。

标签: vb.net

解决方案


给定一个名为 GroupBoxToppings和一个名为 的 Integer 字段TopNum,我会这样做:

TopNum = Toppings.Controls.OfType(Of CheckBox)().Count(Function(cb) cb.Checked)
If TopNum >= 3 Then
    '...
End If

您可以将其放在CheckChanged所有复选框的事件处理程序中。或者更好的是,所有复选框都可以具有相同的事件处理程序,其中包含此代码。

另外,我可能会删除If条件并TopNum从字段更改为属性。然后If条件将进入属性设置器。

Public Property TopNum As Integer
   Get
       Return _topNum
   End Get
   Set (value As Integer)
        _topNumn = value
        If value >= 3 Then
             '...
        Else
             '...
        End If
   End Set
End Property
Private _topNum As Integer = 0        

Public Sub ToppingsChanged(sender As Object, e As EventArgs) 
    TopNum = Toppings.Controls.OfType(Of CheckBox)().Count(Function(cb) cb.Checked)
End Sub

Public Sub New()
   IntializeComponent()

    For Each cb As CheckBox In Me.Controls.OfType(Of CheckBox)()
       AddHandler cb, AddressOf ToppingsChanged
    Next
End Sub

推荐阅读