【发布时间】:2017-08-11 13:54:23
【问题描述】:
所以我有一个简洁的小功能,用于确保在 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
所以我有一个漂亮的 groupbox,里面有大约 10 个报告,而且效果很好。当我尝试为其中一个提取物包含一个组合框时,问题就出现了,我让用户从下拉列表中选择某些内容并将其用作参数。我不想将它包含在 GroupBox 之外(除非无法解决我的问题),但是,如果我将它包含在其中,我会收到一个错误..
无法将“System.Windows.Forms.ComboBox”类型的对象转换为类型 'System.Windows.Forms.CheckBox'。
有没有办法让我从循环中排除一些控件,例如
For each cntrl as CheckBox in gbxReports.controls // except comboboxes/ or only checkboxes??
我可能在组框中拥有的唯一控件是复选框和组合框。
【问题讨论】:
-
最简单的解决方案是从
foreach中删除as Checkbox,并在执行任何操作之前检查循环内部控件是否为checkbox类型 -
如果您只想一次选择一个复选框,为什么不使用组框中的单选按钮呢?这样,一次只能检查一个,而无需编写任何代码。看看这里 - msdn.microsoft.com/en-us/library/…