从应用程序中清除组合框下拉列表

时间:2014-09-01 15:22:02

标签: vb.net loops combobox

我正在进行一项要求用户回答20个问题(多项选择)的作业。我正在使用DropDownList属性,因此用户无法输入除A,B,C或D以外的任何内容。

基本上,我有20个组合框,我有一个清除它们的按钮,但代码我显然应该是一个循环,但我不知道该怎么做。

截至目前,我的代码如下所示:

cboQuestion1.Items.Clear()
cboQuestion2.Items.Clear()
...
cboQuestion20.Items.Clear()

如果有人能对此有所了解,我将不胜感激。

3 个答案:

答案 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,然后遍历列表以清除它们。

迭代Form's Controls collection.

答案 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