【发布时间】:2020-07-08 22:44:34
【问题描述】:
我正在构建一个大型数据输入表单,并希望基于复选框启用或禁用组合框组(如果选中该复选框,则为用户输入启用组合框集合,反之亦然)。我想使用集合,因为组合框并不总是按顺序排列(例如:组合框 1-7,然后是组合框 12,然后是 16 和 45-57)。收藏似乎很理想。
我已经构建了集合,添加了组合框,并向组合框添加了项目。当我运行应用程序时,所有项目都在组合框中。我可以单独启用或禁用它们,但我不能将组合框作为一个集合启用/禁用。我如何将它们作为一个组启用或禁用?
如果我选择表单中的所有组合框,然后运行与变量匹配的名称的直通列表(例如,对于框 1 - 56),我可以让它工作,但这使得使用集合多余的。我还想在集合组中输出数据以供以后使用。
为此,我已经把头撞在墙上一天左右了..
声明收藏
Dim CablesCollectionBoxes As New Collection
将组合框添加到集合中
CablesCollectionBoxes.Add(ComboBox1)
CablesCollectionBoxes.Add(ComboBox2)
CablesCollectionBoxes.Add(ComboBox3)
.
<removed for space and readability>
.
CablesCollectionBoxes.Add(ComboBox56)
我正在尝试将 ComboBoxes 的集合修改为禁用状态,但下面的代码不起作用。
for I as integer = 1 to 56
CablesCollectionBoxes.Item(i) = Disabled
next
如果我使用它,它确实有效,但我没有使用集合,我正在运行所有组合框和匹配的名称:
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
如何作为一个组访问组合框并更改属性?我是否错误地声明了集合?
【问题讨论】:
-
您必须设置每个控件的属性。它可以更短,如
[Your List Collection].ForEach(Sub(c) c.Enabled = False)。无论如何,您都会迭代集合中的元素。您可以构建一个类对象,按组启用/禁用控件(通过 name 或其他方式)并构建集合,以简化运行时的过程。如果您无法将单个元素添加到单个父容器中,那么迭代单个元素是不可避免的。将属性绑定到设置是可能的,但是使用Enabled属性很棘手,而且 IMO 不值得。迭代集合并不是一个问题 -
首先,不要使用
Collection类。这是 VB6 的保留,不应在新代码中使用。如果您想要ComboBoxes的集合,请使用List(Of ComboBox)。 -
如果控件在表单上的布局使得组在一起,您可以将
Panels添加到表单,然后将您的ComboBoxes添加到Panels。然后,您可以完全取消集合并使用For Each cb In somePanel.Controls.OfType(Of ComboBox)()。
标签: vb.net collections combobox properties