Frage

Wie kann ich also einen Wert von einer Form an eine andere weitergeben? Zum Beispiel: Der Benutzer wählt eine Organisation aus einer Liste aus und eröffnet ein Auslöserformular, mit dem ein Benutzer verschiedene Informationen zur Reise eingeben kann. An einem Ort möchte ich ein weiteres kleines Pop -up -Formular hinzufügen, in dem sie Kontaktinformationen (nur einen Namen und Telefon für POC) der Organisation eingeben können, die sie besuchen.

Wenn diese anfängliche Form aus dem Auswahlbildschirm geöffnet wurde, enthält sie zwei IDs, die einfach in Textfeldern versteckt sind (eine ist die Tripid und die andere die Orgide). Wie übergeben ich diese an die zweite kleine Pop -up -Form, damit das so ist, Die Kontaktinformationen enthält die relativen IDs.

Vielen Dank.

War es hilfreich?

Lösung

Der beste Ansatz in diesen Fällen besteht nicht darin, zu versuchen, eine Reihe von Variablen zu verabschieden. Es ist zu viel Code und unflexibel. Wenn Sie beispielsweise zwei Werte übergeben müssen, was passiert dann über die Jahre, in denen diese Anforderung auf 5 Werte wächst? Der Versuch, einen Gesamtwert zu pflegen und zu bestehen, ist zu viel Codierungsarbeiten.

Denken Sie daran, dass jede Form in MS-Access wirklich ein Klassenobjekt ist, das Sie im Code manipulieren können. Verwenden Sie hier einen Objektansatz und Sie finden, dass Sie nicht nur weniger Code schreiben, sondern auch Ihr Code sauberer, modularer, kein globaler CARS benötigt, und Code, den Sie schreiben, kann häufig zwischen verschiedenen Formen wiederverwendet werden.

Hier ist, wie:

Im Allgemeinen können Sie einen Verweis auf das vorherige Formularobjekt erhalten, wenn ein Formular ein anderes Formular in der zweiten Form in den Formularen On-Open-Ereignis einsteigt (tatsächlich können Sie sogar so spät wie beim On-Load-Ereignis verwenden. Mit anderen Worten, Sie können hier einen Objektansatz verwenden.

Auf der Formulierungsmodulebene deklare ich für das Formular ein Formularobjekt als:

Option Compare Database
Option Explicit 
dim frmPrevious       as form 

Dann gehen wir in den Formularen On-Load-Veranstaltung:

Set frmPrevious = Screen.ActiveForm

Jetzt kann jeder Code in unserem Formular frei Code, Ereignisse und sogar Varizen verwenden, die aus diesem vorherigen Formular in Code als öffentlich deklariert sind.

Wenn Sie also eine Festplatte erzwingen möchten, schreiben Sie über das vorherige Formular und laden Sie Daten erneut.

frmPrevious.Refresh

Wenn Sie den ID -Wert festlegen möchten, dann gehen Sie:

frmPrevious!ID = some value

Und beachten Sie, dass Sie sogar Form als öffentliche Variable für dieses Formular deklarieren können. Wenn Sie also zwei Formulare tief sind, können Sie gehen:

frmPrevious.frmPrevious!ID = some value

Deklarieren Sie also einfach ein Formulationsobjekt in jedem Formulierungs -Code -Modul (oder zu denjenigen, bei denen Sie Werte im Code verwenden müssen). Der obige Mittel bedeutet, dass jeder Code einen vorgesehenen Verweis auf das vorherige Formularobjekt hat. Funktionen, die in einer Form als öffentlich deklariert werden, werden zu einer Methode der Form und können wie folgt ausgeführt werden:

frmPrevious.MyCustomRefresh

Oder sogar Dinge wie eine Option, um das vorherige Formular zu erzwingen, um eine Rechnungsnummer zu generieren und einzurichten:

frmPrevous.SetInvoice

oder

frmPrevious.SetProjectStatusOn

Sie können also nicht nur Werte und Daten hin und her mischen, sondern auch Funktionen und Funktionen ausführen, die Sie in Code für die vorherige Form erstellen.

Tatsächlich haben die meisten meiner Formen als Codierungsstandard eine öffentliche Funktion genannt MyRefresh.

Beachten Sie, dass die Schönheit dieses Ansatzes darin besteht, dass Sie also die Werte + Set -Werte aus diesem vorherigen Formular lesen können. Auf diese Weise 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 her mischen. Der andere Vorteil hier ist, dass Sie nicht nur auf Variablen beschränkt sind, sondern Felder, Kontrollwerte (Ereignisse, Eigenschaften) usw. verwenden können.

Dieser Ansatz bedeutet, dass ein Großteil der vorherigen Form jetzt zu Ihren Fingerspitzen steht.

Versuchen Sie also nicht, einen Vollhack Variablen zu bestehen. Geben Sie eine Referenz auf das Formular weiter und Sie haben ein nettes, bereitgestelltes Objekt an Ihren Fingerspitzen. Dadurch wird diese Art von Codierungsproblem zu einem Kinderspiel gemacht.

Andere Tipps

Der übliche Weg wäre, die Textboxen in der Anfangsform aus der Popup -Form wie folgt zu verweisen:

Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID

Dies bindet jedoch die Popup -Form eng an die Anfangsform, so dass es nirgendwo anders in der Anwendung verwendet werden kann.

Ein besserer Ansatz ist die Verwendung von Openargs:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID

Dadurch werden Ihre beiden Werte in eine Zeichenfolge gelegt, die an das Popup -Formular übergeben wird. Sie können dann die beiden Werte mithilfe der Split -Funktion aus den Openargs analysieren.

Weitere Informationen zum Übergeben von Parametern mit OpenArgs finden Sie unter:http://www.fmsinc.com/free/newtips/access/accesstip13.asp

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top