Der beste Ansatz ist in diesen Fällen nicht versucht helfen, könnte eine Reihe von Variablen zu übergeben . Es ist zu viel Code und unflexibel. Wenn Sie beispielsweise zwei Werte übergeben müssen, was passiert im Laufe der Jahre, wenn diese Anforderung auf 5 Werte ansteigt? Der Versuch, eine ganze Reihe von Werten zu erhalten und weiterzugeben, ist zu viel Programmierarbeit.
Denken Sie daran, dass jedes Formular in ms-access wirklich ein Klassenobjekt ist, das Sie im Code manipulieren können. Verwenden Sie also hier einen Objektansatz und Sie werden feststellen, dass Sie nicht nur weniger Code schreiben, sondern Ihr Code wird sauberer, modularer, benötigt keine globalen Variablen mehr und der von Ihnen geschriebene Code kann oft zwischen verschiedenen Formularen wiederverwendet werden.
Hier ist, wie:
Im Allgemeinen, wenn eine Form eines andere Form in der zweiten Form startet in den Formen auf offenes Ereignisse (in der Tat, Sie können sogar so spät wie das On-Load-Ereignis verwenden) können Sie Nehmen Sie einen Verweis auf das vorherige Formularobjekt auf. Mit anderen Worten, Sie können hier einen Objektansatz verwenden.
Am Formen Modulebene, für Form I ein Formular-Objekt deklarieren:
Option Compare Database
Option Explicit
dim frmPrevious as form
Dann in den Formen auf Last Ereignis, wir gehen:
Set frmPrevious = Screen.ActiveForm
nun jeder Code In unserem Formular können Sie FREI, Code, Ereignisse, sogar Variablen verwenden, die aus diesem vorherigen Formular im Code als öffentlich deklariert wurden.
Also, wenn Sie eine Festplatte schreiben des vorherigen Formulars erzwingen möchten, und Daten erneut laden.
frmPrevious.Refresh
Wenn Sie die ID-Wert festlegen möchten, dann gehen Sie:
frmPrevious!ID = some value
Und beachten Sie, dass Sie auch Form vorherigen als öffentliche Variable für diese Form erklären können, und damit, wenn Sie zwei Formen gehen tief, könnten Sie:
frmPrevious.frmPrevious!ID = some value
So einfach erklären ein Formen in jeder Form Code-Modul-Objekt (oder zumin damit diejenigen, in denen Sie Werte im Code verwenden). Das bedeutet, dass jeder Code einen referenzierten Verweis auf das vorherige Formularobjekt enthält.
frmPrevious.MyCustomRefresh
oder sogar wie eine Option Dinge die vorherige Form zu zwingen, eine Rechnungsnummer zu generieren und Setup: Funktionen deklariert als Scham in einer Form ein Verfahren zur Herstellung der Form werden wird, und kann wie ausgeführt werden
frmPrevous.SetInvoice
oder frmPrevious.SetProjectStatusOn
nur also nicht, können Sie mischen Werte und Daten hin und her, aber Sie können leicht Features und Funktionen ausführen, die Sie im Code für die prevous Form aufzubauen.
In der Tat als ein Kodierungsstandard haben die meisten meiner Formen eine Schamfunktion namens MyRefresh.
Beachten Sie, dass die Schönheit dieses Ansatzes darin besteht, dass Sie + usage + set-Werte aus diesem vorherigen Formular lesen können. Dadurch kann Ihr Code nicht nur Werte empfangen, sondern auch Werte in diesem vorherigen Formular festlegen. Dieser Ansatz ist also bidirektional. Sie können Daten und Werte zwischen den Formularen hin- und herschieben. Der andere Vorteil hier ist, dass Sie NICHT nur auf Variablen beschränkt sind, sondern auch Felder, Kontrollwerte (Ereignisse, Eigenschaften) usw. verwenden können.
Dieser Ansatz bedeutet, dass Sie jetzt viel von der vorherigen Form zur Hand haben.
Versuchen Sie also nicht, eine ganze Reihe von Variablen zu übergeben. Übergeben Sie einen Verweis auf das Formular und Sie haben ein schönes fertiges Objekt zur Hand, das diese Art von Codierungsproblemen zum Kinderspiel macht.
Es ist eine Weile her, seit ich mit Access gearbeitet habe, aber können Sie das andere Formular aufrufen, Variablen auf Modulebene/Formularebene festlegen und dann das andere Formular schließen? –