Добавить настраиваемый класс в объекты пользовательской формы во время выполнения и при создании из кода - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь найти способ инициализировать пользовательскую форму, добавляя настраиваемые классы к объектам, которые существуют в форме (эта часть работает, как ожидалось), но после ее загрузки, и мой пользователь нажимает «Добавить» (дополнительные элементы управления). необходимо добавить вновь созданные элементы управления в коллекцию классов, созданную во время выполнения.

Мой код работает, но он не добавляет объекты в коллекцию, поэтому он не запускает события, когда я взаимодействую с объектами, созданными из кода после загружается пользовательская форма.

Код 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 добавил элементы. Я думаю, что могу облажаться, объявляя новый класс вместо простого добавления элементов управления в существующие коллекции, не уверены?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...