Ciao,
Sto lavorando alla creazione di un'app JMP per raccogliere dati in una tabella e visualizzare tali dati in modo intuitivo. Come parte di quell'app, ho un modulo MainWin che è dove l'utente trascorrerà la maggior parte del proprio tempo. All'interno di quel modulo MainWin, è presente una funzione UpdateGUI che viene utilizzata per aggiornare l'interfaccia utente (per lo più Table Box riepilogate) con i dati della tabella dati incorporata.
Quando un utente desidera aggiungere dati, avvia un secondo modulo per l'immissione dei dati. Una volta inseriti i dati e premuto "OK", i dati vengono aggiunti alla tabella principale. Vorrei chiudere questo modulo per effettuare una chiamata alla funzione UpdateGUI nel modulo MainWin. Non ricordo come l'avevo scritto, ma funzionava quando il secondo modulo era una finestra modale. Ora ho cambiato il secondo modulo in una finestra di dialogo e la chiamata a UpdateGUI non funziona più.
Per risolvere questo problema, ho provato alcune cose.
Il primo errore era che la funzione UpdateGUI era sconosciuta al secondo modulo (sembra ovvio in retrospettiva), ma quando ho reso il nome globalmente disponibile, chiamarlo dal secondo modulo significava che tutti i riferimenti all'interno della funzione al modulo MainWin erano anche rotto ..
La seconda cosa che ho provato è stata l'aggiunta di un ciclo while a MainWin che attende che una variabile venga impostata su 1 e quindi chiama un aggiornamento. Questo ha funzionato tecnicamente, ma ha causato alcuni rallentamenti significativi ... forse perché ho usato una funzione Wait ().
Come consiglieresti di gestire questo tipo di chiamata di funzione tra moduli?
Grazie!</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-313041" slang="en-US" mode="NONE">Ri: moduli app JMP e spazi dei nomi</LINGO-SUB><LINGO-BODY id="lingo-body-313041" slang="en-US" mode="NONE"><P>Ciao<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/20438" target="_blank"> @mringqui</A> ,</P>
<P>Penso di avere una soluzione per quello che stai cercando di fare.Fondamentalmente, penso che tu voglia definire un riferimento allo spazio dei nomi dell'istanza MainWin fino allo spazio dei nomi dell'applicazione.Per farlo, ho aggiunto la seguente riga nello script MainWin:</P>
<PRE><CODE class=" language-jsl">Application:MainInstance = this module instance;
Ho creato un'app banale per illustrare.MainWin visualizza solo un numero.UpdateWin ti consente di inserire un nuovo numero che aggiorna la visualizzazione in MainWin quando premi Close.Puoi vedere come ho definito le cose nello script dello spazio dei nomi dell'applicazione per rendere disponibile l'espressione della GUI di aggiornamento in tutti i moduli.
display_num = 0;
Update GUI = Expr(
Show(MainInstance:Text_Disp << Get Text);
MainInstance:Text_Disp << Set Text(char(display_num));
);
L'approccio dovrebbe generalizzare a ciò che vuoi fare.
@cwillden grazie per aver esaminato questo!
L'aggiunta del riferimento nello spazio dei nomi dell'applicazione ha reso la funzione accessibile a UpdateWin in un modo molto più pulito di quanto facessi prima, grazie! Farò sicuramente leva su questo nelle situazioni future.
Sfortunatamente, la chiamata della funzione da UpdateWin riscopre ancora tutte le variabili nella funzione in UpdateWin. Penso che quello che ho imparato sia che ho bisogno di pulire i miei spazi dei nomi. Probabilmente serve un file Nomi predefiniti qui (1); gettato lì.
Sono stato in grado di ottenere ciò che volevo inviando un file << Fare clic su; al pulsante Aggiorna che ho in MainWin. Questo sembra assicurarsi che tutto rimanga con l'ambito corretto.
Grazie ancora per l'aiuto, mi hai messo nella giusta direzione