Bonjour,
Je travaille sur la création d'une application JMP pour collecter des données dans un tableau et visualiser ces données de manière conviviale. Dans le cadre de cette application, j'ai un module MainWin sur lequel l'utilisateur passera la plupart de son temps. Dans ce module MainWin, il existe une fonction UpdateGUI qui est utilisée pour actualiser l'interface utilisateur (principalement des boîtes de tableau résumées) avec les données de la table de données intégrée.
Lorsqu'un utilisateur souhaite ajouter des données, il lance un deuxième module de saisie de données. Une fois que les données sont saisies et qu'ils appuient sur "OK", les données sont ajoutées au tableau principal. Je voudrais fermer ce module pour passer un appel à la fonction UpdateGUI dans le module MainWin. Je ne me souviens pas comment je l'avais écrit, mais cela fonctionnait lorsque le deuxième module était une fenêtre modale. J'ai maintenant changé le deuxième module pour être une fenêtre de dialogue, et l'appel à UpdateGUI ne fonctionne plus.
Pour résoudre ce problème, j'ai essayé plusieurs choses.
La première erreur était que la fonction UpdateGUI était inconnue du deuxième module (semble évident rétrospectivement), mais lorsque j'ai rendu le nom disponible globalement, l'appel à partir du deuxième module signifiait que toutes les références de la fonction au module MainWin étaient aussi cassé ..
La deuxième chose que j'ai essayée a été d'ajouter une boucle while au MainWin qui attend qu'une variable soit définie sur 1, puis d'appeler une actualisation. Cela a fonctionné techniquement, mais a provoqué des ralentissements importants ... peut-être parce que j'ai utilisé une fonction Wait ().
Comment recommanderiez-vous de gérer ce type d'appel de fonction inter-module?
Je vous remercie!</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-313041" slang="en-US">Re: Modules et espaces de noms de l'application JMP</LINGO-SUB><LINGO-BODY id="lingo-body-313041" slang="en-US"><P>salut<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/20438" target="_blank"> @mringqui</A> ,</P>
<P>Je pense que j'ai une solution pour ce que vous essayez de faire.Fondamentalement, je pense que vous souhaitez étendre une référence à l'espace de noms de l'instance MainWin jusqu'à l'espace de noms de l'application.Pour ce faire, j'ai ajouté la ligne suivante dans le script MainWin:</P>
<PRE><CODE class=" language-jsl">Application:MainInstance = this module instance;
J'ai créé une application triviale pour illustrer.MainWin affiche juste un nombre.UpdateWin vous permet de saisir un nouveau numéro qui met à jour l'affichage dans MainWin lorsque vous appuyez sur Fermer.Vous pouvez voir comment j'ai défini les choses dans le script d'espace de noms d'application pour rendre l'expression de l'interface graphique de mise à jour disponible dans tous les modules.
display_num = 0;
Update GUI = Expr(
Show(MainInstance:Text_Disp << Get Text);
MainInstance:Text_Disp << Set Text(char(display_num));
);
L'approche doit se généraliser à ce que vous voulez faire.
@cwillden merci pour votre recherche!
L'ajout de la référence dans l'espace de noms de l'application a rendu la fonction accessible à UpdateWin d'une manière beaucoup plus propre que je ne le faisais auparavant, merci! Je vais certainement en tirer parti dans de futures situations.
Malheureusement, l'appel de la fonction à partir de UpdateWin redéfinit toujours toutes les variables de la fonction vers UpdateWin. Je pense que ce que j'ai appris, c'est que je dois nettoyer mes espaces de noms. Besoin probablement d'un Noms par défaut ici (1); jeté là-dedans.
J'ai pu réaliser ce que je voulais en envoyant un << Cliquez; sur le bouton Actualiser que j'ai dans MainWin. Cela semble garantir que tout reste correctement cadré.
Merci encore pour l'aide, tu m'as mis dans la bonne direction