Vb.net 使用组合框集合更改Enabled属性

Vb.net 使用组合框集合更改Enabled属性,vb.net,collections,combobox,properties,Vb.net,Collections,Combobox,Properties,我正在构建一个大型数据输入表单,并希望基于复选框启用或禁用组合框组(如果选中复选框,则组合框集合将启用以供用户输入,反之亦然)。我想使用集合,因为组合框并不总是按顺序排列(例如:组合框1-7、组合框12、组合框16和组合框45-57)。收藏似乎很理想 我已经构建了集合,添加了组合框,并向组合框中添加了项目。运行应用程序时,所有项目都在组合框中。我可以单独启用或禁用它们,但不能将组合框作为集合启用/禁用。。如何将它们作为一个组启用或禁用 如果我选择表单中的所有组合框,然后运行与变量名称匹配的thr

我正在构建一个大型数据输入表单,并希望基于复选框启用或禁用组合框组(如果选中复选框,则组合框集合将启用以供用户输入,反之亦然)。我想使用集合,因为组合框并不总是按顺序排列(例如:组合框1-7、组合框12、组合框16和组合框45-57)。收藏似乎很理想

我已经构建了集合,添加了组合框,并向组合框中添加了项目。运行应用程序时,所有项目都在组合框中。我可以单独启用或禁用它们,但不能将组合框作为集合启用/禁用。。如何将它们作为一个组启用或禁用

如果我选择表单中的所有组合框,然后运行与变量名称匹配的thru列表(例如,框1-56),我可以实现这一点,但这使得使用集合变得多余。我还想在收集组中输出数据,供以后使用

这一天我已经把头撞在墙上一天左右了

申报集合 向集合中添加组合框 如果我使用它,它确实可以工作,但我没有使用集合,我正在运行所有的组合框和匹配的名称:

For i As Integer = 1 To 56
    Dim clsCombo As ComboBox = DirectCast(Me.Controls.Find("ComboBox" & i.ToString(), True)(0), ComboBox)
    clsCombo.Enabled = True
Next
还是这个

    ComboBox1.Enabled = True
    ComboBox2.Enabled = True
    ComboBox3.Enabled = True
    ComboBox4.Enabled = True
     .
    <removed for space and readability>
     .
    ComboBox56.Enabled = True
ComboBox1.Enabled=True
ComboBox2.Enabled=True
ComboBox3.Enabled=True
ComboBox4.Enabled=True
.
.
ComboBox56.Enabled=True

如何作为一个组访问组合框并更改属性?我是否错误地声明了集合?

不要使用集合。不推荐使用软集合<代码>使用列表(共T个)

Dim组合列表作为新列表(组合框)()
comboList.Add(cbo1)
组合列表。添加(cbo2)
组合列表。添加(cbo3)
'导入系统。Linq
comboList.ForEach(Sub(cbo)cbo.Enabled=True)
这是你能接近的

现在,如果您想有一些选择性的方法来启用/禁用或其他什么,您可以使用
标记
属性来标记,然后它将如下所示

comboList.Where(Function(cbo) cbo.Tag IsNot Nothing AndAlso CBool(cbo.Tag)).ToList().ForEach(Sub(cbo) cbo.Enabled = True)

确保在程序启动时,复选框和组合的enabled属性处于syn状态。使用设计器

Private ComboCollection As New List(Of ComboBox)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    BuildCBCollection()
End Sub

Private Sub BuildCBCollection()
    For Each ctrl As Control In Me.Controls
        If TypeOf (ctrl) Is ComboBox Then
            ComboCollection.Add(CType(ctrl, ComboBox))
        End If
    Next
End Sub

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    For Each cb In ComboCollection
        cb.Enabled = Not cb.Enabled
    Next
End Sub

您必须设置每个控件的优先级。它可以更短,如
[您的列表集合].ForEach(Sub(c)c.Enabled=False)
。无论如何都要迭代集合中的元素。您可以构建一个类对象,通过组(通过名称或其他方式)启用/禁用控件,还可以构建集合,以简化运行时的过程。如果不能将单个元素添加到单个父容器中,那么迭代单个元素是不可避免的。将属性绑定到设置是可能的,但启用
属性很棘手,而且不值得。迭代集合并不完全是一个问题。首先,不要使用
collection
类。这是VB6遗留下来的,不应该在新代码中使用。如果您想要一组
组合框
,请使用
列表(组合框)
。如果控件在表单上的布局使组放在一起,则可以将
面板
添加到表单中,然后将
组合框
添加到
面板
。然后,您可以完全取消集合,并对somePanel.Controls.OfType(组合框的)中的每个cb使用
)。这就是我的想法,我在声明一个集合,我应该使用一个组合列表。老办法,太好了。谢谢,我又跑了。
    ComboBox1.Enabled = True
    ComboBox2.Enabled = True
    ComboBox3.Enabled = True
    ComboBox4.Enabled = True
     .
    <removed for space and readability>
     .
    ComboBox56.Enabled = True
comboList.Where(Function(cbo) cbo.Tag IsNot Nothing AndAlso CBool(cbo.Tag)).ToList().ForEach(Sub(cbo) cbo.Enabled = True)
Private ComboCollection As New List(Of ComboBox)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    BuildCBCollection()
End Sub

Private Sub BuildCBCollection()
    For Each ctrl As Control In Me.Controls
        If TypeOf (ctrl) Is ComboBox Then
            ComboCollection.Add(CType(ctrl, ComboBox))
        End If
    Next
End Sub

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    For Each cb In ComboCollection
        cb.Enabled = Not cb.Enabled
    Next
End Sub