Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перекрестные ссылки на форму и класс / 4 сообщений из 4, страница 1 из 1
28.05.2018, 16:33
    #39651181
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрестные ссылки на форму и класс
Есть класс "clsSuperClass"

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Option Compare Database

Private WithEvents m_appFrm As Form


Public Sub init(ByRef frm As Form)
    Debug.Print "init"
    Set m_appFrm = frm
    
    m_appFrm.OnUnload = "[Event Procedure]"
    m_appFrm.OnClose = "[Event Procedure]"
End Sub

Public Sub deinit()
    Set m_appFrm = Nothing
End Sub

Private Sub m_appFrm_Unload(Cancel As Integer)
    Debug.Print "m_appFrm_Unload"
End Sub

Private Sub m_appFrm_Close()
    Debug.Print "m_appFrm_Close"
End Sub

Private Sub Class_Initialize()
    Debug.Print "Class_Initialize"
    Set m_appFrm = Nothing
End Sub


Private Sub Class_Terminate()
    Debug.Print "Class_Terminate"
    Set m_appFrm = Nothing
End Sub



Есть форма "frmEx":

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Option Compare Database
Option Explicit

Private cls As New clsSuperClass

Private Sub Form_Load()
    cls.init Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
    'Set cls = Nothing
End Sub



Суть в том, что 2010 Аксе код формы в событии Unload(если строчку раскомментировать) - проходит спокойно, тогда как в 97 аксе - вызывает жестокое падение. Тогда как с закомментированной строчкой не проходит событие класса - Terminate.


Почему я храню в формы ссылку на класс: потому что если ее не хранить где-нибудь, класс сразу сделает Terminate.
Почему я храню в классе ссылку а форму: требуется для дальнейшей подписи на события WithEvents


Почему меня это волнует? Таки если не проходит событие Terminate вроде как ссылка где-то должна оставаться, а это плохо.


Пример прикреплен.
...
Рейтинг: 0 / 0
28.05.2018, 17:15
    #39651238
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрестные ссылки на форму и класс
Можно подвесить инстанс суперкласса методом Мюнхгаузена,
а в процедуре обработки m_appFrm_Close рвать ссылку.
...
Рейтинг: 0 / 0
28.05.2018, 18:15
    #39651292
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрестные ссылки на форму и класс
Predeclared, а в чем заключается метод этого самого Мюнхгаузена?
...
Рейтинг: 0 / 0
28.05.2018, 18:28
    #39651297
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрестные ссылки на форму и класс
Это когда ссылка на экземпляр хранится в самом экземпляре.

Вот здесь можно почитать, например: 329037
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перекрестные ссылки на форму и класс / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]