Question

Alors, comment puis-je passer une valeur d'une forme à une autre? Par exemple: L'utilisateur select est une organisation à partir d'une liste et cela ouvre une forme de voyage qui permet à un utilisateur de saisir diverses informations concernant le voyage. A un endroit que je voudrais ajouter une autre petite forme de pop-up où ils peuvent entrer des informations de contact (juste un nom et téléphone pour POC) de l'organisation qu'ils visitent.

Alors, quand cette forme initiale ouverte à partir de l'écran de sélection, il a deux pièces d'identité qui sont simplement cachés dans des zones de texte (étant le tripID, et l'autre étant le OrgID), alors comment passer dois-je ces au deuxième petit pop-up forme afin que les informations de contact comporte les identifiants relatifs avec elle.

Merci.

Était-ce utile?

La solution

La meilleure approche dans ce cas est de ne pas tenté de passer un tas de variables. Il est trop beaucoup de code, et est inflexible. Par exemple, si vous avez besoin de passer deux valeurs, ce qui se passe au cours des années où cette exigence pousse à 5 valeurs? Essayer de maintenir et transmettre tout un tas de valeurs est trop de travail de codage.

Gardez à l'esprit que chaque forme en ms accès est vraiment un objet de classe que vous pouvez manipuler dans le code. Ainsi, l'utilisation d'une approche objet ici et vous vous trouvez non seulement écrire moins de code, mais votre code sera plus propre, plus modulaire, pas besoin de vars global, et le code que vous écrivez peut souvent être réutilisée entre les différentes formes.

Voici comment:

En général quand une forme lance une autre forme dans la 2ème forme dans les formulaires ouverts événement (en fait, vous pouvez même utiliser aussi tard que l'événement en charge), vous pouvez prendre une référence à l'objet de formulaire précédent . En d'autres termes, vous pouvez utiliser une approche objet ici.

Au niveau du module de formulaires, pour la forme I déclare un objet de forme en tant que:

Option Compare Database
Option Explicit 
dim frmPrevious       as form 

Ensuite, dans les formes en charge les cas, nous allons:

Set frmPrevious = Screen.ActiveForm

Maintenant, tout code notre formulaire peut LIBREMENT utiliser le code, les événements, même varibles déclarée publique de cette forme précédente dans le code.

Donc, si vous voulez forcer une écriture de disque de la forme précédente, et re-charge des données.

frmPrevious.Refresh

Si vous souhaitez définir la valeur d'ID, puis allez:

frmPrevious!ID = some value

Et, notez que vous pouvez même déclarer la forme précédente en tant que variable publique pour cette forme, et donc si vous deux formes profondes, vous pouvez aller:

frmPrevious.frmPrevious!ID = some value

Alors, il suffit de déclarer une forme objet dans chaque module de code de formulaires (ou de peur que ceux où vous avez besoin d'utiliser des valeurs dans le code). Ce qui précède signifie que tout code a une référence à tout fait l'objet de formulaire précédent. Les fonctions déclarées comme public sous une forme deviendra une méthode de la forme, et peut être exécuté comme:

frmPrevious.MyCustomRefresh

ou même des choses comme une option pour forcer la forme précédente pour générer et configurer un numéro de facture:

frmPrevous.SetInvoice

ou

frmPrevious.SetProjectStatusOn

Ainsi, non seulement vous pouvez mélanger les valeurs et les données avant et en arrière, mais vous pouvez facilement exécuter caractéristiques et fonctions que vous créez dans le code pour la forme prevous.

En fait, comme une norme de codage, la plupart de mes formes ont une fonction publique appelée MyRefresh.

Notez que la beauté de cette approche est que vous pouvez ainsi lire + utiliser + valeurs de réglage de cette forme précédente. Cela permet à votre code pour recevoir non seulement des valeurs, mais aussi définir des valeurs dans cette forme précédente. Cette approche est donc bi-directionnelle. Vous pouvez mélanger les données et les valeurs et-vient entre les formes. L'autre avantage ici est que vous ne se limite pas à plusieurs variables, mais peut utiliser des champs, des valeurs de contrôle (événements, propriétés) etc.

Cette approche signifie qu'une grande partie de la forme précédente est maintenant à portée de main.

Alors, ne pas essayer de passer tout un tas de variables. Passez une référence à la forme et vous avez un bel objet tout fait à portée de main et il fait ce type de problème de codage d'un jeu d'enfant.

Autres conseils

La façon habituelle serait de référencer les zones de texte sous la forme initiale de la forme de pop-up, comme ceci:

Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID

Cependant, cette lie étroitement la forme de pop-up à la forme initiale, de sorte qu'il ne peut être utilisé nulle part ailleurs dans l'application.

Une meilleure approche consiste à utiliser OpenArgs:

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

Cette place vos deux valeurs dans une chaîne, qui est passé à la forme de pop-up. Vous pouvez ensuite analyser les deux valeurs sur les OpenArgs en utilisant la fonction Split.

Pour plus d'informations sur les paramètres en utilisant le passage OpenArgs, voir: http://www.fmsinc.com/free/NewTips/Access/accesstip13.asp

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top