Najlepszym rozwiązaniem w takich przypadkach, aby nie próbowali przejść kilka zmiennych . Jest to zbyt wiele kodu i jest nieelastyczne. Na przykład, jeśli potrzebujesz przekazać dwie wartości, co dzieje się przez lata, gdy wymaganie to wzrasta do 5 wartości? Próba utrzymania i przekazania całego waloru wartości to za dużo pracy przy kodowaniu.
Należy pamiętać, że każda forma w ms-access to tak naprawdę obiekt klasy, którym można manipulować w kodzie. Tak więc, użyj podejścia obiektowego, a zobaczysz, że nie tylko piszesz mniej kodu, ale twój kod będzie bardziej czysty, bardziej modułowy, nie będzie potrzeby globalnych zmiennych, a kod, który napiszesz, często będzie ponownie wykorzystywany między różnymi formularzami.
Oto jak:
Na ogół, gdy jeden formularz uruchamia inną formę w 2 postaci w formach na otwartej imprezy (w rzeczywistości, można nawet użyć dopiero w przypadku obciążeniem) można odbierz odwołanie do PREVIOUS obiektu formularza. Innymi słowy, możesz tutaj zastosować podejście obiektowe.
na poziomie modułu formy, na formularzu zadeklarować obiekt formularza jako:
Option Compare Database
Option Explicit
dim frmPrevious as form
Następnie w formach obciążeniem zdarzeń, idziemy:
Set frmPrevious = Screen.ActiveForm
Teraz każdy kod w naszym formularzu może WOLNO używać kodu, zdarzeń, a nawet zmiennych zadeklarowanych jako publiczne z poprzedniej formy w kodzie.
Tak więc, jeśli chcesz wymusić zapis dysku na poprzednim formularzu i ponownie załadować dane.
frmPrevious.Refresh
Jeśli chcesz ustawić wartość ID, a następnie przejść:
frmPrevious!ID = some value
I należy pamiętać, że można nawet zadeklarować forma poprzedniego jako PUBLIC zmiennej dla tej postaci, a więc jeśli wy dwie formy głęboko, można przejść:
frmPrevious.frmPrevious!ID = some value
Więc po prostu zadeklarować formy sprzeciwu w każdym module kodu formy (lub zeby te, gdzie trzeba użyć wartości w kodzie). Powyższe oznacza, że dowolny kod ma gotowe odniesienie do poprzedniego obiektu formularza. Funkcje zadeklarowane jako łonowe w formularzu staną się metoda formularza i można uruchamiać jak:
frmPrevious.MyCustomRefresh
lub nawet rzeczy jak jakiś opcją wymuszenia poprzednią formę do generowania i konfiguracji numer faktury:
frmPrevous.SetInvoice
lub frmPrevious.SetProjectStatusOn
więc nie tylko można przetasować wartości i dane iz powrotem, ale można łatwo wykonać cechy i funkcje, które budują w kodzie dla formularza prevous.
W rzeczywistości jako standard kodowania, większość moich formularzy ma funkcję łonową o nazwie MyRefresh.
Należy pamiętać, że piękno tego podejścia polega na tym, że można w ten sposób odczytać + użyć + ustawić wartości z poprzedniego formularza. Dzięki temu Twój kod może nie tylko otrzymywać wartości, ale także ustawiać wartości w tym poprzednim formularzu. To podejście jest dwukierunkowe. Możesz przesuwać dane i wartości między formularzami. Inną zaletą jest to, że nie ograniczasz się tylko do zmiennych, ale możesz używać pól, wartości kontrolnych (zdarzeń, właściwości) itp.
Takie podejście oznacza, że znaczna część poprzedniej formy jest teraz na wyciągnięcie ręki.
Nie próbuj więc przekazywać całego zestawu zmiennych. Przekaż odwołanie do formularza i masz gotowy gotowy obiekt na wyciągnięcie ręki i sprawia, że ten rodzaj problemu z kodowaniem jest prosty.
Minęło trochę czasu odkąd pracowałem z Access, ale czy możesz zadzwonić do innej formy, ustawić zmienne na poziomie modułu/formularza, a następnie zamknąć inny formularz? –