当两个选中时禁用GroupBox中的其他复选框
问题描述:
Private Sub AllBoxes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, CheckBox5.CheckedChanged, CheckBox6.CheckedChanged
Dim qty As Int16 = 0
Dim cb As CheckBox
For Each cb In GroupBox8.Controls.OfType(Of CheckBox)
If cb.Checked Then
qty += 1
End If
Next
If qty = 2 Then
For Each cb In GroupBox8.Controls.OfType(Of CheckBox)
If Not cb.Checked Then
cb.Enabled = False
End If
Next
Else
For Each cb In GroupBox8.Controls.OfType(Of CheckBox)
cb.Enabled = True
Next
End If
End Sub
它只是不起作用。 groupbox的名字是groupbox8,它有6个复选框。我需要选择两个复选框。当两个选中时禁用GroupBox中的其他复选框
答
您可以使用LINQ的一点的
Private Sub AllBoxes_CheckedChanged(sender As Object, e As EventArgs)
' Get all checkboxes in the groupBox8
Dim checks = groupBox8.Controls.OfType(Of CheckBox)()
' Count how many are checked
Dim cnt = checks.Where(Function(x) x.Checked).Count()
If cnt < 2 Then
' Enable all, avoid an if and don't care if already enabled
For Each c In checks
c.Enabled = True
Next
Else
' Disable all except the two checked...
For Each k In checks.Where(Function(x) Not x.Checked)
k.Enabled = False
Next
End If
End Sub
:)很好的解决方案简化了很多你的CheckedChanged事件处理程序...简化可能不是正确的字虽然... –
好,LINQ的是在第一次恐吓,但是一旦你掌握了通过一个产生另一个序列的表达式枚举的序列的概念,所有的部分开始落在原地。 – Steve
雅但它既不快也不容易阅读,并最终添加更多的对象代码比经典的方法..只是我的意见,虽然, –