powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в данной форме узнать из какой формы она запущена
11 сообщений из 11, страница 1 из 1
Как в данной форме узнать из какой формы она запущена
    #32503612
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запуск, разумеется , данной формы производится из многих форм.
( вроде уже был недавно топик , но не могу найти )
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32503614
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
передать из вызывающей формы через OpenArgs
DoCmd.OpenForm "Форма1", , , , , , Screen.ActiveForm.Name
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32503967
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет это понятно, - это не сильный ход, надо узнать не предпринимая усилий со стороны вызывающей формы.
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32503993
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак

А если я открыл форму из одного окна
Затем перешел на другое окно и из него открыл ту же форму
Какой ответ надо получить?
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32504255
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это уже некорректный подход ( или ,скорее , понимание работы ) :
Если из другого окна открывается ТА ЖЕ форма, то это неправильно - она не должна открываться, т.к. уже открыта. Может только открыться НОВЫЙ ЭКЗЕМПЛЯР этой формы, да собственно если Вы из другой формы открываете опять эту же форму, то и открывается новый экземпляр, а не передается управление уже прежде открытой форме,как можно понять с Ваших слов !
ИМХО так.
( Надеюсь, не возникнет путаницы с "та" "эта" форма )
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32504272
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожет только открыться НОВЫЙ ЭКЗЕМПЛЯР этой формы, да собственно если Вы из другой формы открываете опять эту же форму, то и открывается новый экземпляр, а не передается управление уже прежде открытой форме,как можно понять с Ваших слов !
Если открывать
docmd.openform
, то именно передается управление прежде открытой форме...
А вообще, с передачей параметра, наверное, проще всего.
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32504283
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если никаких усилий со стороны вызывающей формы - то действительно никак. Хотя бы потому, что форма может быть открыта:
1) из другой формы
2) из процедуры
3) при запуске приложения
4) из другого приложения
5) мало ли как еще
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32504335
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делаю в форме Public свойство,
которое заполняю ссылкой на вызвавшую форму
при открытии формы.
Еще лучше(стандартней)
создать коллекцию и добавлять(удалять)
членов с нужными свойствами при открытии(закрытии)
форм.
И узнавать всю необходимую инфу из нее.
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32504448
ИМХО
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не пугают левые извраты с дикими граблями - создай форму мониторинга (скрытую, с таймером, или бесконечным циклом с дуювентсом - чтобы все остальное работало), в ней все время опрашивай активную форму в объектную переменную (или даже массивчик - "а-ля стек"). В том случае, если твоя форма открывается только из форм (а не пунктов меню) - _при ее открытии_ первым делом запрашивай у формы мониторинга содержимое объектной переменной (тут потребуется некая тонкая настройка - чтобы не поймать себя самое). Вот как быть с удалением экземпляров форм (которые перестанут закрываться без переписывания кода закрытия при таком решении) - еще не придумал (тут без апи, похоже, не разрулить, может попробовать хапать в "монитор" не объект, а его hwnd, а при открытии опрашивать hwnd-ы открытых форм, и найденный объект присваивать св-ву "вызвавшая". Вот только как быть с подформами?) :0)


но, имхо, нетрудно найти все вызовы, и не связываться с паразитно работающим кодом. (к тому ж проблемным)
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32504904
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перепробовал разные
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function GetActiveWindow Lib "user32" () As Long
Public Declare Function GetAncestor Lib "user32.dll" (ByVal hwnd As Long, ByVal gaFlags As Long) As Long
Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

не смог добиться адекватного результата .

Оказалось, что для случая вызова из формы подойдет анализ в событии открытия формы :

Screen.ActiveControl.Parent.name , а при вызове из меню он даст перехватываемую ошибку.
...
Рейтинг: 0 / 0
Как в данной форме узнать из какой формы она запущена
    #32504944
ИМХО
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сиба! Бум знать.

действительно в момент открытия
Screen.ActiveControl - элемент, в котором вызвано открытие (если есть)
Screen.ActiveControl.Parent - форма, где он располагается

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
Debug.Print Screen.ActiveControl.Name
Debug.Print Screen.ActiveControl.Parent.Name
Debug.Print Screen.ActiveControl.Parent.hwnd
Debug.Print Me.hwnd
....
имеем

Код: plaintext
1.
2.
3.
btnOpen
F
  1311838  
  590998  
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в данной форме узнать из какой формы она запущена
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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