如何在表单加载时访问多个动态创建的Combobox?

时间:2015-03-10 02:45:24

标签: arrays vb.net combobox

我在表单加载时创建组合框,但事情是我添加了一个新的cb,我无法访问(先设置值,编辑属性等)。

见下面的例子:

Sub Start_stackoverflow()

    Dim strings() As String = {"Green", "Purple", "Red"}

    Dim x as integer
    For x = LBound(strings) To UBound(strings)
        NewDropDown(x,50,100,strings(x),strings(x))
    Next x

End Sub

Private Sub NewDropDown(ByVal Number As Integer, ByVal PosX As Integer, ByVal PosY As Integer, ByVal Name As String, ByVal Text As String)
            cbComboBox = New ComboBox
            cbComboBox.Location = New Point(150, PosY - 4%)
            cbComboBox.Name = Number
            cbComboBox.ForeColor = Color.White
            cbComboBox.BackColor = Color.DarkBlue
            cbComboBox.Text = Name
            cbComboBox.AutoSize = True
            Me.Controls.Add(cbComboBox)
End Sub

所以这就是发生的事情,我可以很好地创建组合框,添加值但是如果我想编辑组合框绿色例如(因为它是第一个)我不能。 即使我尝试这个:

Sub Test()
    UpdateComboBoxCurrentlySelected(Green, MyValueIwantSelected)
End Sub

Sub UpdateComboBoxCurrentlySelected(ByVal SetGrpName As ComboBox, ByVal CurrentItem As String)
        SetGrpName.Text = (CurrentItem)
        SetGrpName.SelectedText = (CurrentItem)
        SetGrpName.SelectedItem = (CurrentItem)
        SetGrpName.SelectedIndex = (CurrentItem)
        SetGrpName.SelectedValue = (CurrentItem)
End Sub

任何人都可以对此有所了解,这样我就会知道如何正确地做到这一点。

由于

1 个答案:

答案 0 :(得分:1)

您需要保留对要编辑的对象的引用:

'  At form level
Private dropdowns As Dictionary(Of String, Combobox) = New Dictionary(Of String, ComboBox)

'  Populate from Sub Start_stackoverflow()
Dim dropdown As ComboBox = Nothing
' ...
dropdown = NewDropDown(x,50,100,strings(x),strings(x))
dropdowns.Add(dropdown.Name, dropdown)

' change UpdateComboBoxCurrentlySelected signature to
Sub UpdateComboBoxCurrentlySelected(ByVal SetGrpName As String, ByVal CurrentItem As String)
' get the dropdown by name
Dim dropdown as ComboBox = dropdowns(SetGrpName)
' ...

或者您可以遍历表单中的所有控件,查找具有您要求的名称的控件。

Dim foundControl As ComboBox = Nothing
For Each control As Control In Me.Controls
  If control.GetType Is GetType(ComboBox) AndAlso (control.Name = SetGrpName) Then
    foundControl = control
  End If
Next

If Not Nothing Is foundControl Then
  '  Do something with your control.
End If