не закрывается вызванное окно | |
---|---|
danton1973 Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
Из меню вызывается форма
windowsType=0-Modeless Из неё вызывается другая форма с изображениями windowsType=1-Modal FORM.Init()
отладчик останавливается на строчке функции THISFORM.Unload вродебы уже закрытой формы.... |
Re: не закрывается вызванное окно | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Так делать не надо. Если форма вызывается через DO FORM, то она и так покажется когда нужно будет (если в команде явно не указана опция NOSHOW), если создаётся как объект, то там где её нужно показать, скажем сразу же после создания, стоит сделать loChildForm.Show(1)
Сохранить ссылку на вызывающую форму - это хорошо, но для надёжной работы стоит перед любым использованием этой ссылки проверить что она всё ещё ссылается на объект, может быть даже проверяя что у объекта есть некоторое свойство, типа type('Thisform.v_form.Name') = 'C' Для целей взаимодействия между формами может быть достаточно передать в "дочернюю" не ссылку на вызывающую, а специальный "объект параметров" (типа oPar = CreateObject("Custom или Empty или некоторый свой класс")). Через AddProperty() можно насоздавать своих свойств (если не заморачиваться на описание собственного класса) через которые и передать то что надо, и принять назад то что выбрали/ввели/сделали в дочерней форме. При этом ссылка на собственно родительскую форму в дочерней не нужна, и никаких проблем не возникнет даже если родительская форма по какой-то причине будет закрыта раньше чем дочерняя (например аварийный выход из приложения) - т.к. этот объект независим, и то что обе формы на него ссылаются никак не связывает сами эти формы друг с другом.
Если уж есть ссылка на вызывающую форму куда надо что-то вернуть, то именно в методе выбора/закрытия это и стоит делать. Не надо откладывать до Unload. Красивый код будет делать это не в click кнопки (и тем более dblClick другого объекта не будет вызывать Click какой-то кнопки), а в отдельном методе формы, специально написанном для этой цели - скажем "SelectAndClose". Его уже и будут вызывать кнопки/KeyPress и т.п. Форма не перестанет сущестововать, если где-то остались ссылки на внутренние объекты этой формы. Есть варианты "принудительно" обнулить все подобные ссылки - используя немного странноватую команду
Если рассматривать форму как "чёрный ящик", то никакой внешний код не должен знать ничего про её внутреннее устройство (какие на ней расположены кнопки/гриды/картинки и т.п.) - всё что знают использующие форму, это её публичный интерфейс - т.е. определённые свойства и методы самой формы. Через них и организуется всё взаимодействие с этой формой. ------------------ WBR, Igor |
© 2000-2024 Fox Club  |