我正在进行一项要求用户回答20个问题(多项选择)的作业。我正在使用DropDownList属性,因此用户无法输入除A,B,C或D以外的任何内容。
基本上,我有20个组合框,我有一个清除它们的按钮,但代码我显然应该是一个循环,但我不知道该怎么做。
截至目前,我的代码如下所示:
cboQuestion1.Items.Clear()
cboQuestion2.Items.Clear()
...
cboQuestion20.Items.Clear()
如果有人能对此有所了解,我将不胜感激。
答案 0 :(得分:3)
所有控件都驻留在窗体的Controls集合中,因此一种方法是迭代它(假设这些CBO是您唯一要清除的):
For Each cbo As ComboBox In Controls.OfType(Of ComboBox)
cbo.Items.Clear
Next
另一种方法是将目标控件的名称存储在List(of String)
中。将此视为您希望以某种特殊方式跟踪或处理的控件的购物清单:
Private myCBONamesList As List(of String)
'...
myCBONamesList.Add("cboQuestion1")
' etc
' add many/all at once:
myCBONamesList.Addrange(New String(){"cboQuestion1", "cboQuestion2" ...etc})
New String()
创建一个临时数组,其中包含列出的文字值(在{}
中),并将整个内容传递给您的列表以填充它。使用它:
For Each s As String in myCBONamesList
Controls(s).Items.Clear
Next
此方法允许您定位某些CBO并将其他人留下。
答案 1 :(得分:0)
它可能是也可能不是最佳方式,但您可以将所有组合框添加到 List
,然后遍历列表以清除它们。
答案 2 :(得分:0)
以下是使用过滤迭代Forms Controls集合的示例,以确保您不会意外清除非问题ComboBox:
For Each cbo As ComboBox In Me.Controls.OfType(Of ComboBox)
If cbo.Name Like "cboQuestion*" Then
cbo.Items.Clear()
End If
Next
编辑或者,如果你遇到一件事:
For Each cbo As ComboBox In Me.Controls.OfType(Of ComboBox).Where(Function(x) x.Name Like "cboQuestion*")
cbo.Items.Clear()
Next