2013-08-06 4 views
0

Кто-нибудь знает, как динамически добавлять массив в группу comboboxes в VB.net? Я мог бы действительно использовать помощь (я боролся с этим весь день). Когда я пытаюсь сделать это, я получаю ошибку при загрузке формы.VB.NET: DYNAMICALLY ADD ARRAY TO 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 

Ошибка: "Не удалось привести объект типа '... Кнопка' для типа '... Combobox'."

Я пробовал так много вариаций этого кода, но я просто не могу заставить его работать. В конечном итоге у меня будет около сотни аналогично сконструированных combobox в моем приложении, и я хотел бы иметь возможность программно инициализировать их элементы. Может ли кто-нибудь помочь?

Спасибо,

Элиас

ответ

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

К сожалению, я получаю сообщение об ошибке, когда я делаю так. ** Ошибка: «элементы» не являются членами «System.Windows.Forms.Control». ** Я получаю синие squiggly строки под «ctl.items». Кажется, он не распознает ctl как ComboBox. Программа даже не запускается. – Elias

+0

@Elias my bad ... :-) вы должны изменить «If TypeOf cntrl Is» на «If TypeOf ctl Is». Я обновил код. – spelltox

+0

Да, это не проблема. Я заметил небольшую опечатку, когда вы ее написали. Проблема в том, что VS2012 не будет компилировать код, потому что он не будет распознавать «ctl» как выпадающий список. Я все еще испытываю эту проблему. – Elias