2013-08-06 53 views
0

有谁知道如何动态添加一个数组到VB.net中的一堆组合框?我真的可以使用帮助(我一直在这一整天都在努力)。当我尝试按照我的方式做到这一点时,我在表单加载时出现错误。VB.NET:动态添加阵列到COMBOBOX

我的代码:

Private Sub Form1_Load(ByVal sender as Object, ByVal e as EventArgs) Handles Me.Load 
    Dim MyArray() as String = {"a","b","c"} 

    For each ctl as ComboBox in Me.Controls 
     if ctl.tag = "yadda" then ctl.Items.AddRange(MyArray) 
    Next 
End Sub 

错误: “无法投型”...按钮为键入 '......组合框' 的对象。“

我已经尝试了这么多的变化到这段代码,但我只是不能得到它的工作。我的应用程序中最终会有近百个类似构造的组合框,并且我希望能够以编程方式初始化它们的项目。有人可以帮忙吗?

感谢,

埃利亚斯

回答

3

这是为了做到这一点:

Public Class Form1 

    Function getControl(ByVal controlName As String) As Control 
     Dim numCtrls = Me.Controls.Count() 
     For I As Integer = 0 To numCtrls - 1 
      If Me.Controls.Item(I).Name = controlName Then 
       If TypeOf Me.Controls.Item(I) Is ComboBox Then 
        Return CType(Me.Controls(controlName), ComboBox) 
       End If 
      End If 
     Next 
    End Function 

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

     Dim myArray As Array = {"a", "b", "c"} 
     Dim myComboBox As ComboBox 

     For Each ctl As Control In Me.Controls 
      If TypeOf ctl Is ComboBox Then 
       If ctl.Tag = "yadda" Then 
        myComboBox = getControl(ctl.Name) 
        myComboBox.Items.AddRange(myArray) 
       End If 
      End If 
     Next 

    End Sub 

End Class 

您遍历所有控件(按钮,组合,等...),那么你检查它是否是你想要的类型(ComboBox)并且做你需要的任何事情。

祝你好运!

+0

不幸的是,当我这样做时出现错误。 **错误:'items'不是'System.Windows.Forms.Control'的成员。**我在“ctl.items”下面看到蓝色的波浪线。它似乎不认识ctl作为组合框。该程序甚至不会运行。 – Elias

+0

@Elias 我不好... :-) 你应该改变“If TypeOf cntrl Is”为“If TypeOf ctl Is”。我更新了代码。 – spelltox

+0

是的,那不是问题所在。当您最初编写它时,我注意到了小错字。问题在于VS2012不会编译代码,因为它不会将“ctl”识别为组合框。我仍然遇到这个问题。 – Elias