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

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


но, имхо, нетрудно найти все вызовы, и не связываться с паразитно работающим кодом. (к тому ж проблемным)
...
Рейтинг: 0 / 0
30.04.2004, 16:49
    #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
30.04.2004, 17:05
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в данной форме узнать из какой формы она запущена / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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