Я застрял в очень раздражающем вопросе.MSAccess (2007) - всплывающая и модальная форма - instancing через VBA
Мне нужно открыть форму внутри модуля класса, передав сам класс форме, чтобы форма могла использовать все свойства и методы класса. Я говорю о форме, а не о USERFORM. (В этом втором случае проблема не будет). Форма должна быть как всплывающей, так и модальной.
Так давайте предположим, что этот код в методе вызова класса, который открывает форму:
sub OpenFormMethodOfTheCallingClass
set MyForm = new [Form_FormToBeOpened]
with MyForm
set .MyFatherClass = Me
.SetFocus ' ... this opens the form
MsgBox "Ok, user has closed the form ..."
end with
end sub
Таким образом, поток кода НЕ «STOP» ВНУТРИ ФОРМЕ. Я имею в виду, что сообщение «Хорошо, пользователь закрыл форму ...» появляется сразу, «впереди» открытой формы. И тогда, очевидно, метод заканчивается, и форма (опять же, очевидно) исчезает, так как это экземпляр метода закрытия.
В представлении с дизайном для всплывающих и модальных форм установлены значение ИСТИНА.
Установка двух свойств в вызывающую процедуру таким образом:
with MyForm
.Modal = True
.PopUp = True
(...)
... не помогает вообще, как: - MODAL не влияет на поведение код потока - POPUP может» t быть установленным (!): он возвращает ошибку времени выполнения.
Единственный способ я нашел, чтобы достичь моей целью является открытие так:
DoCmd.OpenForm "FormToBeOpened", WindowMode:=acDialog
Таким образом, поток кода «заклинивание» в форму, и только тогда, когда пользователь закрывает сам поток формы возвращается к вызывающей процедуре и ее следующей инструкции. Но проблема в том, что я не могу передать вызывающий класс в форму. ОК, кто-то может возразить, что: поскольку моя форма MODAL, никакие множественные экземпляры экземпляра формы не могут быть открыты пользователем, и поэтому я мог бы передать любое свойство вызывающего класса в форму другими способами («bridge- public-variables "или JSON в OpenArgs ...). Но это ... действительно ужасно.
Я боюсь, не знаю почему, это очень глупый вопрос, с простым ответом. :)
Давайте посмотрим.
Thks,
FL
Да, извините, я имел в виду диалог. Исправленный. – Gustav
Спасибо, Густав: Я полностью согласен с тобой по поводу «философских» замечаний (я имею в виду, что Access не является подходящей средой для структурированного кодирования). Однако моя проблема заключалась в том, что мне не нужно было «извлекать данные и свойства из вызывающей ФОРМЫ», а скорее из вызывающего КЛАССА. Если вы снова прочитаете мой вопрос (не делайте этого !, D), вы увидите, что я не могу подготовить форму CALLED как объект, передающий вызывающий класс в правильном «чистом» виде, но я могу открыть его только с помощью DoCmd, что мешает мне взаимодействовать с ним из вызывающего класса. – Fil
Тогда, я думаю, ваш единственный вариант - сохранить (копию) форму, в которой для Modal и PopUp установлено значение True. – Gustav