Vb.net 如何在FOR-EACH控制循环中排除某些控件?
所以我有一个简洁的小函数,我用它来确保在一个GroupBox中只能选中一个复选框 这就是它看起来的样子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
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,它本质上是相同的,但是您编写了更多代码来完成相同的任务:)