CIAO,
Fondamentalmente sto cercando di accedere a una variabile che è stata creata all'interno di una funzione. Sto provando a stampare quella variabile al di fuori della funzione, ma continuo a ricevere errori di nome "Colla" di riferimento non risolti/cancellati. Fondamentalmente ho una funzione per un pulsante che crea una nuova finestra e memorizza il valore di lf all'interno di quella funzione e creazione della finestra. Voglio essere in grado di stampare il valore di lf ma non sono sicuro di come. Tutti i suggerimenti sarebbero apprezzati. Un'altra domanda è che quando stampo lf all'interno della funzione OKscript1, non viene stampato nel registro. È perché OKscript1 non è una funzione ma un Expr? Inoltre, quando eseguo il programma la prima volta dopo aver selezionato un file, ottengo un errore di nome irrisolto. Ma quando lo eseguo di nuovo e seleziono un file diverso e visualizzo il registro, nel registro viene visualizzato il file precedente che avevo selezionato prima di uscire. Qualche idea sul perché? Penso che probabilmente sia una cosa molto semplice che ho trascurato o qualcosa che ha a che fare con il mio scoping?
mainWindow = New Window("Instruction Tagger",
ob = Outline Box("Instruction Tagger",
Border Box(Left(3), top(2),
V List Box(
H List Box(
Panel Box("Please choose one of the following options:", <<MARKUP> 1), Throw ("Error: Please only select one measurement file. Alternitavely, go back and select 'Tag Multiple Files'. "));
if(Try(N Items(lf) < 1), Throw ("Error: Please select one measurement file.Alternitavely, go back and select 'Tag Multiple Files'."));
);
print(lf);
print(lf); </MARKUP>
CIAO @cwillden ,
Grazie mille per l'aiuto. Avrei dovuto avere un tag per rendere il mio testo in grassetto, motivo per cui ho usato Markup ma mi sono reso conto di averlo tolto. Ho cambiato i lanci e le caselle di testo in didascalie solo per coerenza. Grazie ancora per la spiegazione.
CIAO @Jaz ,
Ho corretto il rientro su questo script perché era difficile da seguire.Ho anche rimosso la roba <
Un paio di problemi qui: quando esegui lo script, eseguirà quelle righe "print (lf)" che avevi in fondo prima che l'utente facesse qualcosa con i dialoghi."lf" non esiste ancora quando chiedi a JMP di stamparlo.Devi inserirlo all'interno dell'espressione OKScript1 in modo che la riga di codice venga eseguita solo quando l'utente preme OK.
Inoltre, non puoi chiudere la finestra prima di ottenere gli elementi da ListF perché ListF non esisterà più.Hai commentato quella riga di codice, quindi non sono sicuro che ciò stesse causando il tuo errore "riferimento oggetto eliminato" o meno.
Lo script qui sotto sembra funzionare.Non ricevo errori e print(lf) funziona.Ha mostrato i file che ho selezionato in un elenco nel registro.
mainWindow = New Window("Instruction Tagger",
ob = Outline Box("Instruction Tagger",
Border Box(Left(3), top(2),
V List Box(
H List Box(
Panel Box("Please choose one of the following options:",
Button Box("Tag a Single File", singleFileButton1("Tag Instructions to Data") ),
Button Box( "Tag Multiple Files", singleFileButton1("Tag Instructions to Data") ),
Text Box("Note: a button to tag the data will appear automatically after you have selected the measurement & PFD files. ")
)
)
)
)
)
);
singleFileButton1 = Function({x},
mainWindow << Close Window;
choosingFilesWindow = New Window(x,
ob = Outline Box("Select Your Files: ",
Border Box (Left(3), top(2)),
vDisplay = V List Box(
H List Box(
Panel Box("Please select one of the options below to choose your measurement & PFD file: ",
Button Box("Select Measurement File", selectMeasurementFileButton("Select Measurement File")),
Button Box("Select PFD File", selectPFDFileButton("Select PFD File")),
Lineup Box (N Col(2), Spacing(3)),
Panel Box("Files Added",
CB = Check Box({"Measurement file added", "PFD file added"},<<SET> 1), Throw ("Error: Please only select one measurement file. Alternitavely, go back and select 'Tag Multiple Files'. "));
if(Try(N Items(lf) < 1), Throw ("Error: Please select one measurement file.Alternitavely, go back and select 'Tag Multiple Files'."));
);</SET>Consiglierei di cambiare l'istruzione "Success" if alla fine.Non credo che CB << Set(1,0) verrà valutato perché hai già utilizzato Throw() per interrompere l'ulteriore elaborazione.Prendi in considerazione la possibilità di sostituire Throw() con Caption() in quella casella.Ciò fa anche in modo che il messaggio di "successo" non sembri un errore come accade con Throw().