Создание массивов элементов управления в Visual Basic

Итак, вот соответствующий код:

Public Shared compSelect(9) As ComboBox
Public Shared compPercent(9) As TextBox
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Data.LoadComponents("C:/Users/Jon/Documents/Visual Studio 2013/Projects/QuickBlend/QuickBlend/QuickBlend/Resources/databaseText.txt")
    MsgBox("finished loading")
    MainForm.compSelect = {CompSelect1, CompSelect2, CompSelect3, CompSelect4, CompSelect5, CompSelect6, CompSelect7, CompSelect8, CompSelect9, CompSelect10}
    MainForm.compPercent = {CompPercent1, CompPercent2, CompPercent3, CompPercent4, CompPercent5, CompPercent6, CompPercent7, CompPercent8, CompPercent9, CompPercent10}
    For Each box As ComboBox In MainForm.compSelect
        box.DataSource = Data.Components
        box.DisplayMember = "Name"
        For Each comp As String In Data.ComponentNames
            box.Items.Add(comp)
        Next
        MsgBox("looped")
    Next
    MsgBox("finished loop")
End Sub

Как видите, я разместил различные окна MsgBox, чтобы точно видеть, что происходит. Он никогда не отображает «зацикленное» окно сообщения. Может ли кто-нибудь объяснить мне, почему он полностью пропускает цикл for? Работал над этим некоторое время и устал от этого. Заранее спасибо за помощь! знак равно


person Squirvin    schedule 02.08.2013    source источник
comment
вы получаете какие-либо исключения?   -  person Daniel A. White    schedule 02.08.2013
comment
поставьте точку останова на For Each box... и посмотрите, есть ли в MainForm.compSelect какие-либо элементы.   -  person hometoast    schedule 02.08.2013
comment
И проверьте Data.ComponentNames... и compPercent не используется в примере кода   -  person CheGueVerra    schedule 02.08.2013
comment
Почему вы привязываете источник данных к комбо И добавляете элементы в комбо?   -  person APrough    schedule 02.08.2013


Ответы (2)


MainForm.compSelect должно быть Me.compSelect, так как это экземпляр (был заполнен выпадающими списками), а не просто полное имя объекта, который не был заполнен.

person OneFineDay    schedule 02.08.2013
comment
Большое спасибо. Причина, по которой я сделал MainForm.compSelect, заключается в том, что я по какой-то причине думал, что вызываю compSelect из статического контекста. У меня большой опыт работы со статической переменной и переменной экземпляра из-за java, но я думаю, поскольку это другой язык, я просто запутался. Спасибо еще раз! - person Squirvin; 03.08.2013
comment
Не беспокойтесь, у каждого языка есть свои тонкости. - person OneFineDay; 03.08.2013

Ваша проблема в том, что вы устанавливаете источник данных для comboBox, а затем пытаетесь добавить в него элементы. .NET это не нравится, и он просто выйдет из подпрограммы, которая пытается это сделать, без предупреждения (если только вы не добавили обработку исключений). Ваш код должен быть...

Public Shared compSelect(9) As ComboBox
Public Shared compPercent(9) As TextBox
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Data.LoadComponents("C:/Users/Jon/Documents/Visual Studio 2013/Projects/QuickBlend/QuickBlend/QuickBlend/Resources/databaseText.txt")
MsgBox("finished loading")
MainForm.compSelect = {CompSelect1, CompSelect2, CompSelect3, CompSelect4, CompSelect5, CompSelect6, CompSelect7, CompSelect8, CompSelect9, CompSelect10}
MainForm.compPercent = {CompPercent1, CompPercent2, CompPercent3, CompPercent4, CompPercent5, CompPercent6, CompPercent7, CompPercent8, CompPercent9, CompPercent10}
For Each box As ComboBox In MainForm.compSelect
    box.DataSource = Data.Components
    box.DisplayMember = "Name"
    'take this stuff out, it is not needed
    'For Each comp As String In Data.ComponentNames
        'box.Items.Add(comp)
    'Next
    MsgBox("looped")
Next
MsgBox("finished loop")
End Sub
person APrough    schedule 02.08.2013