Vb.net 清除/取消选择GroupBox控件中的组合框控件 我的问题是:

Vb.net 清除/取消选择GroupBox控件中的组合框控件 我的问题是:,vb.net,visual-studio,winforms,combobox,Vb.net,Visual Studio,Winforms,Combobox,我有一个清除组框中的文本框和组合框(DropDownList)的功能。虽然文本框正在清除,但我无法清除组合框 我的代码: 注意:。SelectedIndex=-1产生错误: SelectedIndex不是System.Windows.Forms.Control的成员 …考虑到控件,这似乎不一致。当控件是文本框时,文本起作用。在控件集合上循环会返回一个没有SelectedIndex属性的通用控件。 您需要将其转换为适当的类型 Public Sub ClearGroupControls()

我有一个清除组框中的文本框和组合框(
DropDownList
)的功能。虽然文本框正在清除,但我无法清除组合框

我的代码: 注意:
。SelectedIndex=-1
产生错误:

SelectedIndex不是System.Windows.Forms.Control的成员


…考虑到控件,这似乎不一致。当控件是文本框时,文本起作用。

在控件集合上循环会返回一个没有SelectedIndex属性的通用控件。
您需要将其转换为适当的类型

Public Sub ClearGroupControls()
    For Each groupboxControl In Me.Controls.OfType(Of GroupBox)()
        For Each control As Control In groupboxControl.Controls
            ' Clear controls
            If TypeOf control Is TextBox Then
                control.Text = ""
            ElseIf TypeOf control Is ComboBox Then
                Dim cbo = DirectCast(control, ComboBox)
                cbo.SelectedIndex = -1
            End If
        Next
    Next
End Sub
注意,在外部循环中,您可以使用IEnumerable扩展只需要表单的controls集合中枚举器返回的GroupBox类型的控件

您可以将内部循环更改为两个循环,以利用OfType扩展,但如果它真的提供了更好的性能,则应该衡量这一点(这在很大程度上取决于组框中存在的控件数量)


这些组合的下拉方式是什么?@Steve
DropDownList
。它很有效,但我没有理解你建议我使用IEnumerable可以实现什么。我已经研究了和a,但没有结果。最终,你是说它会取代内环,而且,请耐心/善意地告诉我如何操作好吗?我没有权力比发布的两个链接更好地解释,但我认为类型的
扩展就像应用于控件序列的过滤器,只允许括号中所示类型的对象到达您的
groupboxControl
变量。这样你就可以避开演员阵容。控制变量groupboxControl不再是一个通用控件,而是一个具有特定属性的特定GroupBox控件。在内部循环中,您需要检查两种不同类型的控件,因此不可能有一个(??)类型的循环。你可以编写两个循环,一个用于文本框,另一个用于组合框,但我认为你什么也得不到。因此,路由是有一个通用控件,在返回true之后,将其转换为ComboboxThank,感谢您将其分解。我最终使用了一个递归方法,该方法依赖于
TryCast()
,并允许将父对象指定为参数(顺便说一句,允许
。SelectedIndex=-1
)。通过PasteBin。谢谢你的回答!
Public Sub ClearGroupControls()
    For Each groupboxControl In Me.Controls.OfType(Of GroupBox)()
        For Each control As Control In groupboxControl.Controls
            ' Clear controls
            If TypeOf control Is TextBox Then
                control.Text = ""
            ElseIf TypeOf control Is ComboBox Then
                Dim cbo = DirectCast(control, ComboBox)
                cbo.SelectedIndex = -1
            End If
        Next
    Next
End Sub
Public Sub ClearGroupControls()
    For Each groupboxControl In Me.Controls.OfType(Of GroupBox)()
        For Each txt In groupboxControl.Controls.OfType(Of TextBox)()
            txt.Text = ""
        Next
        For Each cbo In groupboxControl.Controls.OfType(Of ComboBox)()
           cbo.SelectedIndex = -1
        Next
    Next
End Sub