|
|
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Запуск, разумеется , данной формы производится из многих форм. ( вроде уже был недавно топик , но не могу найти ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 02:14 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
передать из вызывающей формы через OpenArgs DoCmd.OpenForm "Форма1", , , , , , Screen.ActiveForm.Name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 02:26 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Нет это понятно, - это не сильный ход, надо узнать не предпринимая усилий со стороны вызывающей формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 11:06 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Никак А если я открыл форму из одного окна Затем перешел на другое окно и из него открыл ту же форму Какой ответ надо получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 11:15 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
А это уже некорректный подход ( или ,скорее , понимание работы ) : Если из другого окна открывается ТА ЖЕ форма, то это неправильно - она не должна открываться, т.к. уже открыта. Может только открыться НОВЫЙ ЭКЗЕМПЛЯР этой формы, да собственно если Вы из другой формы открываете опять эту же форму, то и открывается новый экземпляр, а не передается управление уже прежде открытой форме,как можно понять с Ваших слов ! ИМХО так. ( Надеюсь, не возникнет путаницы с "та" "эта" форма ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 12:24 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
авторМожет только открыться НОВЫЙ ЭКЗЕМПЛЯР этой формы, да собственно если Вы из другой формы открываете опять эту же форму, то и открывается новый экземпляр, а не передается управление уже прежде открытой форме,как можно понять с Ваших слов ! Если открывать docmd.openform , то именно передается управление прежде открытой форме... А вообще, с передачей параметра, наверное, проще всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 12:29 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Если никаких усилий со стороны вызывающей формы - то действительно никак. Хотя бы потому, что форма может быть открыта: 1) из другой формы 2) из процедуры 3) при запуске приложения 4) из другого приложения 5) мало ли как еще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 12:33 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Я делаю в форме Public свойство, которое заполняю ссылкой на вызвавшую форму при открытии формы. Еще лучше(стандартней) создать коллекцию и добавлять(удалять) членов с нужными свойствами при открытии(закрытии) форм. И узнавать всю необходимую инфу из нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 12:47 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Если не пугают левые извраты с дикими граблями - создай форму мониторинга (скрытую, с таймером, или бесконечным циклом с дуювентсом - чтобы все остальное работало), в ней все время опрашивай активную форму в объектную переменную (или даже массивчик - "а-ля стек"). В том случае, если твоя форма открывается только из форм (а не пунктов меню) - _при ее открытии_ первым делом запрашивай у формы мониторинга содержимое объектной переменной (тут потребуется некая тонкая настройка - чтобы не поймать себя самое). Вот как быть с удалением экземпляров форм (которые перестанут закрываться без переписывания кода закрытия при таком решении) - еще не придумал (тут без апи, похоже, не разрулить, может попробовать хапать в "монитор" не объект, а его hwnd, а при открытии опрашивать hwnd-ы открытых форм, и найденный объект присваивать св-ву "вызвавшая". Вот только как быть с подформами?) :0) но, имхо, нетрудно найти все вызовы, и не связываться с паразитно работающим кодом. (к тому ж проблемным) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 13:29 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Перепробовал разные 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 , а при вызове из меню он даст перехватываемую ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 16:49 |
|
||
|
Как в данной форме узнать из какой формы она запущена
|
|||
|---|---|---|---|
|
#18+
Сиба! Бум знать. действительно в момент открытия Screen.ActiveControl - элемент, в котором вызвано открытие (если есть) Screen.ActiveControl.Parent - форма, где он располагается Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2004, 17:05 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32504255&tid=1674884]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 435ms |

| 0 / 0 |
