Довольно просто:
frm
- это New [Form_Create Students]
, а не тот, который его вызывает.
Эта новая форма не вызывает OnCreate
мероприятие. Фактически, эта новая форма даже не видна, потому что вы не установили frm.Visible = True
. Если вы хотите установить ее в форму, которая только что вызвала Run
, передайте ее:
На форме:
Private ctrl As ctrCreateStudent
Public Event OnCreate()
Private Sub btnCreate_Click()
Set ctrl = New ctrCreateStudent
ctrl.Run Me
RaiseEvent OnCreate
End Sub
На классе:
Private WithEvents frm As [Form_Create Students]
Public Sub Run(parentForm As [Form_Create Students])
MsgBox "run called"
Set frm = parentForm
End Sub
Public Sub frm_OnCreate()
MsgBox "frm_oncreate event called"
End Sub
Однако серьезное предупреждение: этот код содержит ссылку l oop и, следовательно, утечку памяти.
Форма имеет ссылку на класс, а класс имеет ссылку на форму, поэтому ни одна из них никогда не будет уничтожена. Каждый раз, когда вы закрываете и открываете форму, создается новая форма и объект класса, и ни один из них никогда не будет уничтожен.
При закрытии формы она становится невидимой и выглядит исчезнувшей, но все еще там и с использованием памяти.
Есть много способов обойти это, но самый простой:
В классе:
Public Sub frm_Close()
Set frm = Nothing 'Release form object, break reference loop
End Sub
И убедитесь, что форма При закрытии * Свойство 1034 * установлено в "[Event Procedure]"
, поэтому возникает событие закрытия.