Vb.net 如何在FOR-EACH控制循环中排除某些控件?

Vb.net 如何在FOR-EACH控制循环中排除某些控件?,vb.net,controls,Vb.net,Controls,所以我有一个简洁的小函数,我用它来确保在一个GroupBox中只能选中一个复选框 这就是它看起来的样子 Private Sub ToggleCheckBoxOnEntry(sender As Object, e As EventArgs) 'This handles mutually exclusivity for the check boxes so that only one is ever allowed to be checked Static CurrentlySel

所以我有一个简洁的小函数,我用它来确保在一个GroupBox中只能选中一个复选框

这就是它看起来的样子

Private Sub ToggleCheckBoxOnEntry(sender As Object, e As EventArgs)
    'This handles mutually exclusivity for the check boxes so that only one is ever allowed to be checked 
    Static CurrentlySelectedbox As CheckBox

    If CType(sender, CheckBox).Checked Then
        CurrentlySelectedbox = sender
    End If

    For Each cntrl As CheckBox In gbxReports.Controls
        If cntrl.Checked AndAlso cntrl.Name <> CurrentlySelectedbox.Name Then
            cntrl.Checked = False
        End If
    Next

End Sub    
所以我有一个非常好看的groupbox,里面有大约10份报告,效果非常好。当我尝试为其中一个摘录包含一个组合框时,问题就出现了,在这个组合框中,我允许用户从下拉列表中选择某个内容并将其用作参数。我不想将其包含在GroupBox之外(除非无法解决我的问题),但是,如果将其包含在GroupBox之外,则会出现错误

无法将“System.Windows.Forms.ComboBox”类型的对象强制转换为 “System.Windows.Forms.CheckBox”

是否有方法将某些控件从循环中排除,例如

For each cntrl as CheckBox in gbxReports.controls // except comboboxes/ or only checkboxes??

组框中唯一可能包含的控件是复选框和组合框。

为什么不指定要循环的内容,而不是控件的组合:

For Each chexkb As Checkbox In Controls.OfType(Of Checkbox)()
    'do the loop just on the check boxes
Next

为什么不具体指定要循环的内容,而不是控件的组合:

For Each chexkb As Checkbox In Controls.OfType(Of Checkbox)()
    'do the loop just on the check boxes
Next

最简单的解决方案是从
foreach
中删除
as复选框
,并在执行任何操作之前检查循环内部控件是否为
复选框
类型如果您一次只想选择一个复选框,为什么不改为使用组框中的单选按钮?这样,一次只能检查一个,而无需编写任何代码。查看此处-最简单的解决方案是从
foreach
中删除
as复选框,并在执行任何操作之前检查循环内控件是否为
Checkbox
类型如果一次只选择一个复选框,为什么不使用groupbox中的单选按钮?这样,一次只能检查一个,而无需编写任何代码。看看这里-谢谢。在for Each cntrl下面,我添加了一个if statemnt if TYPEOF cntrl is checkbox,它本质上是相同的,但是您已经编写了更多代码来完成相同的任务:)谢谢。在for Each cntrl下,我添加了一个if statemnt if TYPEOF cntrl is checkbox,它本质上是相同的,但是您编写了更多代码来完成相同的任务:)