2017-02-25 84 views
-1
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中的其他複選框

回答

1

您可以使用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 
+0

:)很好的解決方案簡化了很多你的CheckedChanged事件處理程序...簡化可能不是正確的字雖然... –

+0

好,LINQ的是在第一次恐嚇,但是一旦你掌握了通過一個產生另一個序列的表達式枚舉的序列的概念,所有的部分開始落在原地。 – Steve

+0

雅但它既不快也不容易閱讀,並最終添加更多的對象代碼比經典的方法..只是我的意見,雖然, –

相關問題