如何在FOR EACH CONTROL循环中排除某些控件?

时间:2017-08-11 13:54:24

标签: 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 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    

对于每个checkBox_CheckChanged,我都包含这一行......

Private Sub chkReports_CheckedChanged(sender As Object, e As EventArgs)

    ToggleCheckBoxOnEntry(sender, e)

End Sub

所以我拥有这个看起来很棒的组合框,大约有10个报告,而且效果很好。当我尝试为其中一个提取包含一个组合框时,我会让用户从下拉列表中选择一些内容并将其用作参数。我不想将它包含在GroupBox之外(除非没有办法解决我的问题),但是,如果我将其包含在其中,我会收到错误..

  

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

我有办法从循环中排除某些控件,例如

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

我在组框中可能拥有的唯一控件是复选框和组合框。

1 个答案:

答案 0 :(得分:5)

为什么不具体说明你想要循环而不是混合控制:

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