【问题标题】:How to exclude some controls in a FOR EACH CONTROL Loop?如何在 FOR EACH CONTROL 循环中排除某些控件?
【发布时间】: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/…

标签: vb.net controls


【解决方案1】:

为什么不具体说明要循环的内容而不是控件的组合:

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

【讨论】:

  • 谢谢。在每个 cntrl 下,我添加了一个 if statemnt IF TYPEOF cntrl is Checkbox
  • 这本质上是一样的,但是你写了更多的代码来完成同样的事情:)
猜你喜欢
  • 2021-09-22
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多