Я пытаюсь найти способ инициализировать пользовательскую форму, добавляя настраиваемые классы к объектам, которые существуют в форме (эта часть работает, как ожидалось), но после ее загрузки, и мой пользователь нажимает «Добавить» (дополнительные элементы управления). необходимо добавить вновь созданные элементы управления в коллекцию классов, созданную во время выполнения.
Мой код работает, но он не добавляет объекты в коллекцию, поэтому он не запускает события, когда я взаимодействую с объектами, созданными из кода после загружается пользовательская форма.
Код UserForm_Initialize:
Dim crtl As Control
Dim formLbEvt As fLabelClass
Dim formTbEvt As fTextBoxClass
Dim formCbEvt As fComboBoxClass
===============================
Unrelated code lives here...
===============================
Set colFormLbEvt = New Collection
Set colFormLbs = New Collection
With *userform*
For Each crtl In .Controls
If TypeOf crtl Is MSForms.Label Then
Set formLbEvt = New fLabelClass
Set formLbEvt.formLabel = crtl
colFormLbEvt.Add formLbEvt
colFormLbs.Add crtl, crtl.name
End If
Next
Set formLbEvt = Nothing
Set colFormTbEvt = New Collection
Set colFormTbs = New Collection
For Each crtl In .Controls
If TypeOf crtl Is MSForms.TextBox Then
Set formTbEvt = New fTextBoxClass
Set formTbEvt.formTextBox = crtl
colFormTbEvt.Add formTbEvt
colFormTbs.Add crtl, crtl.name
End If
Next
Set formTbEvt = Nothing
Set colFormCbEvt = New Collection
Set colFormCbs = New Collection
For Each crtl In .Controls
If TypeOf crtl Is MSForms.ComboBox Then
Set formCbEvt = New fComboBoxClass
Set formCbEvt.formComboBox = crtl
colFormCbEvt.Add formCbEvt
colFormCbs.Add crtl, crtl.name
End If
Next
Set formCbEvt = Nothing
End With
===============================
Unrelated code lives here...
===============================
Затем, когда пользователь нажимает «+ Добавить» в нижней части формы, он добавляет строку Comboboxes [я удалил повторяющиеся примеры] и Текстовые поля в форме, вызывая приведенное ниже (которое относится к одному из классов, добавленных во время выполнения), см. Разделы жирным шрифтом , чтобы узнать, какие новые элементы управления следует добавлять в коллекции:
Class модуль fLabelClass code:
Public WithEvents formLabel As MSForms.Label
Dim ctrl As Control
Dim cTag As String
Dim formLbEvt As New fLabelClass
Dim formTbEvt As New fTextBoxClass
Dim formCbEvt As New fComboBoxClass
====================================
Sub that calls addRow lives here...
====================================
Private Sub addRow(rowCount As Integer)
With *userform*
Set ctrl = .Controls.Add("Forms.Label.1", "row" & rowCount + 1)
With ctrl
.Font.name = "Calibri"
.Font.Size = "8"
.Caption = rowCount + 1
.Height = 15.75
.Left = 6
.SpecialEffect = 0
.tag = rowCount + 1
.TextAlign = 2
.Top = 240 + (rowCount * 15.75)
.Width = 12
**Set formLbEvt.formLabel = ctrl
colFormLbEvt.Add formLbEvt
colFormLbs.Add ctrl, ctrl.name**
End With
Set ctrl = .Controls.Add("Forms.ComboBox.1", "prodComboBox" & rowCount + 1)
With ctrl
.Font.name = "Calibri"
.Font.Size = "8"
.Height = 15.75
.Left = 18
.SpecialEffect = 0
.Style = 0
.tag = rowCount + 1
.TextAlign = 1
.Top = 240 + (rowCount * 15.75)
.Width = 162
For i = LBound(pd) To UBound(pd)
.AddItem pd(i)
Next i
**Set formCbEvt.formComboBox = ctrl
colFormCbEvt.Add formCbEvt
colFormCbs.Add ctrl, ctrl.name**
End With
Set ctrl = .Controls.Add("Forms.TextBox.1", "termTextBox" & rowCount + 1)
With ctrl
.Font.name = "Calibri"
.Font.Size = "8"
.Height = 15.75
.Left = 180
.SpecialEffect = 0
.tag = rowCount + 1
.TextAlign = 2
.Top = 240 + (rowCount * 15.75)
.Width = 36
**Set formTbEvt.formTextBox = ctrl
colFormTbEvt.Add formTbEvt
colFormTbs.Add ctrl, ctrl.name**
End With
End With
End Sub
Он не выдает никаких ошибок, и когда я смотрю коллекции, я вижу newl y добавил элементы. Я думаю, что могу облажаться, объявляя новый класс вместо простого добавления элементов управления в существующие коллекции, не уверены?