|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
Добрый день. При активации формы надо выполнить определенное действие, но только если предыдущая форма была определенной. Как узнать откуда пришли, т.е. имя предыдущей формы? Спасибо за любые мысли. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 13:18 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTДобрый день. При активации формы надо выполнить определенное действие, но только если предыдущая форма была определенной. Как узнать откуда пришли, т.е. имя предыдущей формы? Спасибо за любые мысли. Открывать форму с параметрами Куда можно записать чё хошь ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 13:31 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVT, https://support.office.com/ru-ru/article/Макрокоманда-«ОткрытьФорму»-8ece67cc-783c-4b2e-9f33-0e24e8436a05 так для вкуривания. С уважением. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 13:34 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTДобрый день. При активации формы надо выполнить определенное действие, но только если предыдущая форма была определенной. Как узнать откуда пришли, т.е. имя предыдущей формы? Спасибо за любые мысли. А с какой целью интересуетесь? А на каком эвенте тебя это интересует? Формы - эвенты их - это ахтунг. Если с подчиненными - ва-аще атас. Не углубляясь - расставь на ключевых евентах Debug.Print (тебе многое откроется) и по месту ориентируйся. Почему я так лаконичен? Да потому, что плюнул запоминать - кто, кого и после чего открывает... У меня централизованная обработка - выхватываю индекс из имени активной в данный момент в VB и в соответствии со стасуом соседних рулю текущую. Как-то так... . ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 13:51 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVT, Я обычно передаю ссылку на форму, из которой открываю новую через OpenArgs, но т.к. этот параметр принимает только строки, то я предварительно перевожу ссылку на форму/субформу в текстовый вид, а в открываемой форме перевожу его обратно в переменную типа Form. Для этого использую пару функций под катом: Public Function GetFormByPath(strFormPath As String) As Form 'returns form variable of last subform in path by form path like "frm_Main>frm_SubFormControl>frm_SubSubFormControl" Dim astrFrm() As String Dim i As Long Dim frm As Form On Error GoTo ErrorHandler astrFrm = Split(strFormPath, ">") If UBound(astrFrm) < 0 Then GoTo ExitHere End If Set frm = Forms(astrFrm(0)) For i = 1 To UBound(astrFrm) Set frm = frm.Controls(astrFrm(i)).Form Next Set GetFormByPath = frm ExitHere: Exit Function ErrorHandler: Resume ExitHere End Function Public Function GetFormPath(frmForm As Form) As String 'returns form form path like "frm_Main>frm_SubFormControl>frm_SubSubFormControl" Dim strRes Dim frm As Form On Error GoTo ErrorHandler Set frm = frmForm Do If IsFormStandalone(frm) Then strRes = frm.Name & IIf(strRes = "", "", ">" & strRes) Exit Do Else strRes = frm.Parent.ActiveControl.Name & IIf(strRes = "", "", ">" & strRes) Set frm = frm.Parent End If Loop While True ExitHere: On Error Resume Next GetFormPath = strRes Exit Function ErrorHandler: Select Case Err Case 0 Resume Next Case Else LogError Err.Number, Err.Description, Erl, "GetFormPath", "bas_CommonFunctions" Resume ExitHere End Select End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:03 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
Господа, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы). Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:24 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTГоспода, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы). Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы. Дык вам и говорят при открытии формы записывайте в ее свойства имя формы так сказать материнской. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:31 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
при открытии нет материнской формы... нечего туда писать... все открывается из меню. а после... при работе и переключении между формами и надо узнать предыдущую активную форму. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:36 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTформы уже открыты и пользователь просто кликает в нужную форму А, ну это несколько меняет дело, это не открытие. Тогда нужно просто в каждой открытой форме при активации переменную формы в глобальной переменной, при активации другой формы перед запоминанием анализируем значение этой глобальной переменной, там и будет ссылка на предыдущую активную форму. С Popup формами фокус не пройдет, событие активации не отрабатывает, насколько помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:41 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
Если форма открывается/активируется из меню, то можно узнать текущую активную форму в обработчике события от меню ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:46 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
Screen.ActiveForm ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 14:47 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTГоспода, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы). Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы. Блъдь! Ты читай, что тебе пишут умные люди! Это я про себя :) "расставь на ключевых евентах Debug.Print (тебе многое откроется) и по месту ориентируйся." Ты же не хочешь. Ленишься? Вот тебе лог открытия приложения на продакшене: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
А представь, что юзверь еще мышкой кликнет в середине... если я ему позволю, конеччно... а еще евент влезет какой... Знаешь, сколько я полезного из этого лога почерпнул?! Не знаешь? И не узнаешь никогда, пока не заимеешь свой собственный... А смотри - какой он у меня коротенький... Я не допустил НИЧЕГО, чтобы встряло в процесс открытия формы Dash. И еще замечу - нет "событие активации формы" Я пишу на родном языке, но специально посмотрел на вашем - русском. Нет такого. О чем ты, ва-аще? Об Form_Activate() _Deactivate()? Так оно у вас Включение/Отключение называется ... Не? . ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:04 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTГоспода, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы). Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы. Screen.PreviousControl.Parent ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:20 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
точнее так Screen.PreviousControl.Parent.Name всем спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:22 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
на событие Активейт формы писать в глобал массив me.name и проверять пред. значение в стеке ... redim preserve стек(i+1) скек(i)=me.name if скек(i-1)=опредформа then.. ну ты понял ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:24 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTточнее так Screen.PreviousControl.Parent.Name всем спасибо! Вам в до гонку parent [ˈpɛərənt] n роди́тель(ница) m(f) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:30 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
Если это происходит на событии Активация, то, как вариант, получить ссылку на Screen.PreviousControl, а затем через Parent (возможно нескольких) получить ссылку на форму. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 15:42 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Если это происходит на событии Активация, то, как вариант, получить ссылку на Screen.PreviousControl, а затем через Parent (возможно нескольких) получить ссылку на форму. NB Все эти Previous - Control, Value - сопливо-скользкие... как и манипуляции с фокусом (не к столу будь сказано)... ... а тем более через цепочку парентов... ... надо как-то упрощать задачу... примитизировать ее ,что ли... VB, акс - гениальная штука. Но гения, ее сваявшего, пнули давным-давно под ъовно :( И M$ с тех пор тужится-тужится, да ни как не вытужится... с этими шарпами и бемолями... . ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 16:59 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
Lieutenant Pigeon, метод с парентом (одним, те. типа первым Screen.PreviousControl.Parent.Name) прекрасно работает и возвращает имя главной формы даже тогда, когда контрол сидит в третьей-четвертой подформе. (акс 2003) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 17:08 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVTLieutenant Pigeon, метод с парентом (одним, те. типа первым Screen.PreviousControl.Parent.Name) прекрасно работает и возвращает имя главной формы даже тогда, когда контрол сидит в третьей-четвертой подформе. (акс 2003) А я и не спорю... Слова "не работает" от меня не звучали. Я сказал лишь, как Суворов на паркете, - СКЛИЗСКО! * ... в третьей-четвертой подформе ... Будешь ставить на продакшн - позови. У меня рука и еще кое-что паломато... тебя же - трактором переедут :) Мы будем вместе симпатично смотреться :) . ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2016, 17:32 |
|
Как узнать предыдущую форму
|
|||
---|---|---|---|
#18+
NVT, добрый день, Если Screen.PreviousControl чем-то не подойдет, то может пригодится вот это 18901091 Класс clsAppMonitor обеспечивает мониторинг след. событий отчетов/форм приложения: открытие, закрытие, активация и деактивация, генерируя при этом свои события: Public Event AfterOpenFR(FR_Object As Object) Public Event ActivationFR (FR_Object As Object, blnAfterOpen As Boolean) Public Event DeactivateFR (FR_Object As Object, intReasonDeact As ReasonDeact, NewFR As Object, FR_IsBeingActivated As Object) Public Event CloseFR(FR_Object As Object) Подписавшись на выделенные выше события (ActivationFR и DeactivateFR) можно централизовано отслеживать какая/какой форма/отчет открывается/закрывается, активируется/деактивируется. Обработка событий класса clsAppMonitor продемонстрирована в модуле стартовой формы F_Start ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2016, 23:41 |
|
|
start [/forum/topic.php?fid=45&msg=39353695&tid=1612940]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 369ms |
total: | 652ms |
0 / 0 |