powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать предыдущую форму
21 сообщений из 21, страница 1 из 1
Как узнать предыдущую форму
    #39353590
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

При активации формы надо выполнить определенное действие, но только если предыдущая форма была определенной.
Как узнать откуда пришли, т.е. имя предыдущей формы?

Спасибо за любые мысли.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353603
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NVTДобрый день.

При активации формы надо выполнить определенное действие, но только если предыдущая форма была определенной.
Как узнать откуда пришли, т.е. имя предыдущей формы?

Спасибо за любые мысли.
Открывать форму с параметрами
Куда можно записать чё хошь
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353606
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353631
Фотография Lieutenant Pigeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NVTДобрый день.

При активации формы надо выполнить определенное действие, но только если предыдущая форма была определенной.
Как узнать откуда пришли, т.е. имя предыдущей формы?

Спасибо за любые мысли.

А с какой целью интересуетесь? А на каком эвенте тебя это интересует?
Формы - эвенты их - это ахтунг.
Если с подчиненными - ва-аще атас.

Не углубляясь - расставь на ключевых евентах Debug.Print (тебе многое откроется) и по месту ориентируйся.

Почему я так лаконичен? Да потому, что плюнул запоминать - кто, кого и после чего открывает... У меня централизованная обработка - выхватываю индекс из имени активной в данный момент в VB и в соответствии со стасуом соседних рулю текущую. Как-то так...
.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353646
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353672
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы).

Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353678
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NVTГоспода, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы).

Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы.
Дык вам и говорят при открытии формы записывайте в ее свойства имя формы так сказать материнской.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353685
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при открытии нет материнской формы... нечего туда писать... все открывается из меню.

а после... при работе и переключении между формами и надо узнать предыдущую активную форму.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353695
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NVTформы уже открыты и пользователь просто кликает в нужную форму
А, ну это несколько меняет дело, это не открытие.
Тогда нужно просто в каждой открытой форме при активации переменную формы в глобальной переменной, при активации другой формы перед запоминанием анализируем значение этой глобальной переменной, там и будет ссылка на предыдущую активную форму.

С Popup формами фокус не пройдет, событие активации не отрабатывает, насколько помню.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353704
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если форма открывается/активируется из меню, то можно узнать текущую активную форму в обработчике события от меню
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353709
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Screen.ActiveForm
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353742
Фотография Lieutenant Pigeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NVTГоспода, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы).

Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы.

Блъдь! Ты читай, что тебе пишут умные люди!
Это я про себя :)

"расставь на ключевых евентах Debug.Print (тебе многое откроется) и по месту ориентируйся."

Ты же не хочешь. Ленишься?

Вот тебе лог открытия приложения на продакшене:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
81; 1018; 10; 05:59:14.854; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Dum1_Open
82; 1018; 10; 05:59:14.854; 0; ; m00_Log; sp_BL; 0;    
83; 1018; 10; 05:59:14.854; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Dum1_Load
84; 1018; 10; 05:59:14.854; 0; ; m00_Log; sp_BL; 0;    
85; 1018; 10; 05:59:14.857; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Dum2_Open
86; 1018; 10; 05:59:14.857; 0; ; m00_Log; sp_BL; 0;    
87; 1018; 10; 05:59:14.857; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Dum2_Load
88; 1018; 10; 05:59:14.857; 0; ; m00_Log; sp_BL; 0;    
89; 1018; 10; 05:59:14.861; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Mask_Emu_Open
90; 1018; 10; 05:59:14.861; 0; ; m00_Log; sp_BL; 0;    
91; 1018; 10; 05:59:14.861; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Mask_Emu_Load
92; 1018; 10; 05:59:14.862; 0; ; m00_Log; sp_BL; 0;    
93; 1018; 10; 05:59:14.864; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Skp_Open
94; 1018; 10; 05:59:14.864; 0; ; m00_Log; sp_BL; 0;    
95; 1018; 10; 05:59:14.865; 0; ; m01_Ini; fp_FrmDsp; 0; Form_ZSb_Skp_Load
96; 1018; 10; 05:59:14.865; 0; ; m00_Log; sp_BL; 0;    
97; 1018; 10; 05:59:14.865; 0; ; m01_Ini; fp_FrmDsp; 0; Form_Dash_Open
98; 1018; 10; 05:59:14.866; 0; ; m00_Log; sp_BL; 0;    
99; 1018; 10; 05:59:14.867; 0; ; m01_Ini; fp_FrmDsp; 0; Form_Dash_Load

А представь, что юзверь еще мышкой кликнет в середине... если я ему позволю, конеччно... а еще евент влезет какой...

Знаешь, сколько я полезного из этого лога почерпнул?! Не знаешь? И не узнаешь никогда, пока не заимеешь свой собственный... А смотри - какой он у меня коротенький... Я не допустил НИЧЕГО, чтобы встряло в процесс открытия формы Dash.

И еще замечу - нет "событие активации формы"
Я пишу на родном языке, но специально посмотрел на вашем - русском. Нет такого. О чем ты, ва-аще? Об Form_Activate() _Deactivate()? Так оно у вас Включение/Отключение называется ... Не?
.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353769
PreviousControl,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NVTГоспода, формы уже открыты и пользователь просто кликает в нужную форму, тем самым активируя её (событие открытие не происходит, случается событие активации формы).

Т.е. уже открыто несколько форм, а отработать надо только в случае, если переход произошел с определенной формы.

Screen.PreviousControl.Parent
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353774
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее так
Screen.PreviousControl.Parent.Name

всем спасибо!
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353777
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на событие Активейт формы писать в глобал массив me.name и проверять пред. значение в стеке
...
redim preserve стек(i+1)
скек(i)=me.name
if скек(i-1)=опредформа then..

ну ты понял
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353785
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NVTточнее так
Screen.PreviousControl.Parent.Name

всем спасибо!
Вам в до гонку
parent [ˈpɛərənt] n роди́тель(ница) m(f)
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353809
Если это происходит на событии Активация, то, как вариант, получить ссылку на
Screen.PreviousControl, а затем через Parent (возможно нескольких) получить ссылку на форму.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353898
Фотография Lieutenant Pigeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )Если это происходит на событии Активация, то, как вариант, получить ссылку на
Screen.PreviousControl, а затем через Parent (возможно нескольких) получить ссылку на форму.

NB
Все эти Previous - Control, Value - сопливо-скользкие... как и манипуляции с фокусом (не к столу будь сказано)...
... а тем более через цепочку парентов...
... надо как-то упрощать задачу... примитизировать ее ,что ли...

VB, акс - гениальная штука. Но гения, ее сваявшего, пнули давным-давно под ъовно :(
И M$ с тех пор тужится-тужится, да ни как не вытужится... с этими шарпами и бемолями...
.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353907
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lieutenant Pigeon, метод с парентом (одним, те. типа первым Screen.PreviousControl.Parent.Name) прекрасно работает и возвращает имя главной формы даже тогда, когда контрол сидит в третьей-четвертой подформе. (акс 2003)
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39353940
Фотография Lieutenant Pigeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NVTLieutenant Pigeon, метод с парентом (одним, те. типа первым Screen.PreviousControl.Parent.Name) прекрасно работает и возвращает имя главной формы даже тогда, когда контрол сидит в третьей-четвертой подформе. (акс 2003)
А я и не спорю... Слова "не работает" от меня не звучали.
Я сказал лишь, как Суворов на паркете, - СКЛИЗСКО!

* ... в третьей-четвертой подформе ...
Будешь ставить на продакшн - позови.
У меня рука и еще кое-что паломато... тебя же - трактором переедут :)
Мы будем вместе симпатично смотреться :)
.
...
Рейтинг: 0 / 0
Как узнать предыдущую форму
    #39354895
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать предыдущую форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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