Forza l'utente a fornire input entro l'intervalloCiao, sono abbastanza nuovo in JMP e non sono sicuro di come scrivere uno script che genera un errore per impedire all'utente di inserire un numero non valido. Voglio che l'utente inserisca un numero che alla fine viene salvato in una variabile ma richieda nuovamente l'input se il numero è al di fuori dell'intervallo 1-4.
Questo è quello che ho finora senza alcun controllo degli errori:
Names Default To Here (1);
num = 0;
w = New Window( "Prompt",
<<MODAL></MODAL>
Qualsiasi aiuto o suggerimento su come realizzare questo sarebbe apprezzato!
ScriptingOggetto: obbligare l'utente a fornire input entro l'intervalloBasta aggiungere una finestra di chiusura dopo la chiamata alla funzione.
b1 = button box("First Program",
program1();
nw << close window();
),
Oggetto: obbligare l'utente a fornire input entro l'intervalloFunziona perfettamente! Grazie ancora!
Oggetto: obbligare l'utente a fornire input entro l'intervalloSe si dispone di codice aggiuntivo dopo la nuova finestra, è possibile modificare la nuova finestra in finestra modale con << modale (potrebbero essere necessarie altre piccole modifiche). Questo esempio chiuderà anche la finestra modale se viene premuto uno qualsiasi dei pulsanti del programma utilizzando <
nw = new window("Test Options", << modal,
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
program1();
okBtn << Click();
),
b2 = button box("Second Program",
program2();
okBtn << Click();
),
b3 = button box("Third Program",
program3();
okBtn << Click();
),
b4 = button box("Fourth Program",
program4();
okBtn << Click();
),
),
),
h list box(okbtn = Button Box("OK"), cancelBtn=ButtonBox("Cancel"))
);
Show("shouldnt execute before window is closed");Oggetto: obbligare l'utente a fornire input entro l'intervalloModifica: in realtà sembra che qualsiasi codice che segue l'esecuzione del pulsante all'interno della nuova finestra sia in esecuzione PRIMA dei programmi collegati al pulsante per qualche motivo. Qualcuno sa perché questo sta accadendo?
Oggetto: obbligare l'utente a fornire input entro l'intervalloÈ fantastico! Penso che funzionerebbe per i miei scopi, grazie per la condivisione! Infine, questa non è una funzionalità molto importante, ma sai se c'è un modo per premere il pulsante che esegue il programma e quindi la finestra si chiude automaticamente senza che l'utente prema 'esci'?
Oggetto: obbligare l'utente a fornire input entro l'intervalloSe fai riferimento a file su una condivisione di file a cui tutti gli utenti possono accedere, funzionerebbe.
Potresti anche includere i programmi da eseguire nel codice JSL principale stesso come funzioni separate.Ecco un esempio:
// First program
program1 = function({},
show("Running program1");
// JSL code for first program
);
// Second program
program2 = function({},
show("Running program2");
// JSL code for second program
);
// Third program
program3 = function({},
show("Running program3");
// JSL code for third program
);
// Fourth program
program4 = function({},
show("Running program4");
// JSL code for fourth program
);
nw = new window("Test Options",
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
program1();
),
b2 = button box("Second Program",
program2();
),
b3 = button box("Third Program",
program3();
),
b4 = button box("Fourth Program",
program4();
),
),
),
bexit = button box("Exit",
nw << close window();
),
);
Dai un'occhiata alla documentazione JSL per maggiori informazioni sulle funzioni.
Oggetto: obbligare l'utente a fornire input entro l'intervalloCiao! Questo è un ottimo approccio al problema. Mi chiedo però, sarei in grado di condividere tutti gli script del programma in modo che chiunque abbia i codici possa eseguire gli stessi programmi collegati ai pulsanti? O non sarebbe possibile se i percorsi della directory dei file fossero univoci per chiunque scarichi gli script .jsl?
Oggetto: obbligare l'utente a fornire input entro l'intervalloSe desideri eseguire programmi diversi a seconda di ciò che gli utenti selezionano (1-4), utilizzerei invece i pulsanti.Ecco come sarebbe:

Ecco il codice.Si noti che sto usando la casella del pannello per circondare i pulsanti e la casella di allineamento per allineare entrambi i lati delle caselle dei pulsanti.I programmi da eseguire sono memorizzati in c:\myfiles e sono chiamati program1.jsl, program2.jsl ecc. Modificare la cartella ei nomi dei programmi JSL in base alla propria situazione.
nw = new window("Test Options",
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
include("c:\myfiles\program1.jsl");
nw << close window();
),
b2 = button box("Second Program",
include("c:\myfiles\program2.jsl");
nw << close window();
),
b3 = button box("Third Program",
include("c:\myfiles\program3.jsl");
nw << close window();
),
b4 = button box("Fourth Program",
include("c:\myfiles\program4.jsl");
nw << close window();
),
),
),
bexit = button box("Exit",
nw << close window();
),
);Oggetto: obbligare l'utente a fornire input entro l'intervalloGrazie mille ancora, super disponibile!
Oggetto: obbligare l'utente a fornire input entro l'intervalloDovrebbe essere lo stesso, ma sembra un po' strano. Utilizzando l'esempio modale da Scripting Index:
Questa parte è fondamentalmente la condizione 1 dell'if:
ex = New Window("Dialog() example",
<<MODAL></MODAL>E questo è il risultato1
ex["variable"]
e returnAltrimenti:
"CANCEL"
E poiché quei risultati e fondamentalmente le ultime righe che verranno eseguite a seconda del risultato della condizione if, verranno stampati su Log. Puoi verificarlo seguendo due brevi script:
a = 1; //will print 1 to Log as this is the only and last row in script
a = 1;
Write(); //will print this as it is the last row of code
E se intendevi come funziona la variabile ex, puoi verificarlo abbastanza facilmente eseguendo l'esempio nell'indice di scripting e aggiungendo Show(ex) alla fine.
Di seguito è riportato un esempio con l'istruzione if resa un po' più chiara aggiungendo parentesi e commenti e ho anche aggiunto Show() per la variabile ex:
Names Default To Here(1);
If(
( //condition1 starts
ex = New Window("Dialog() example",
<<MODAL></MODAL>(nota a causa di Show() "CANCEL" non è l'ultima riga di codice quando si preme Cancel e non verrà stampato, questo mostrerà anche che il valore della variabile verrà aggiornato anche se si preme cancel)
Spero di aver spiegato tutto correttamente. Ulteriori informazioni sono disponibili nell'Help and Scripting Guide di JMP: Costruisci una finestra modale
Oggetto: obbligare l'utente a fornire input entro l'intervalloÈ perfetto! Grazie mille! :^)
Ai fini dell'apprendimento, cosa significa la fine del codice? So che di solito è If(condizione 1, risultato 1, condizione 2, risultato 2, ..... resultElse); ma questo non lo conosco:
ex["button"] == 1;
,
ex["variable"],
"CANCEL
Oggetto: obbligare l'utente a fornire input entro l'intervalloPenso che tu possa usare << On Validate () per quello.
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>
Modificare:
O intendevi disattivare/disattivare il pulsante?
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>Oggetto: obbligare l'utente a fornire input entro l'intervalloQuesta è una buona idea! Sfortunatamente con questo, se l'utente digita accidentalmente 6 ma desidera davvero digitare 3, il suo input sarà automaticamente scelto come 4. Scusate se il problema è un po' complicato.
Oggetto: obbligare l'utente a fornire input entro l'intervalloCi sarebbe un modo per impedire all'utente di premere il pulsante OK e di uscire dalla finestra a meno che il valore non fosse compreso tra 1 e 4? Penso che così com'è, l'utente può uscire dalla finestra e l'input sarà impostato su 0.
Oggetto: obbligare l'utente a fornire input entro l'intervalloNon l'avevo visto prima (o l'avevo dimenticato). Usando << Imposta minimo e << Imposta massimo:
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL></MODAL>
Oggetto: obbligare l'utente a fornire input entro l'intervalloNon sarebbe più semplice utilizzare Radio Box per un'implementazione del genere?
Names Default To Here(1);
New Window("Example", rb = Radio Box({"True", "False", "None of the above"}, Print("Selection Changed")));Oggetto: obbligare l'utente a fornire input entro l'intervalloCiao, grazie mille per la risposta! Vorrei fare in modo che l'utente sia costretto a scegliere un numero nell'intervallo piuttosto che adattare il codice all'errore dell'utente. Ad esempio, penso che ogni numero si collegherà a un pezzo di codice che verrà eseguito.
Names Default To Here (1);<BR />num = 0;<BR />w = New Window( "Prompt",
<<MODAL></MODAL>
Successivamente, codificherò un'istruzione if dove if input == 1, esegui questo codice, if input == 2, esegui un altro pezzo di codice e così via. Quindi, per la mia situazione, non voglio che il numero si corregga automaticamente a 1 o 4 se fuori portata. Scusa se è stato confuso!
Oggetto: obbligare l'utente a fornire input entro l'intervalloÈ possibile utilizzare una casella di modifica del numero e impostare i limiti inferiore e superiore per l'input e persino dichiarare se i limiti sono validi o meno. Non è necessario scrivere un'espressione o una funzione da controllare. È già integrato in questa casella di visualizzazione.
Oggetto: obbligare l'utente a fornire input entro l'intervalloEcco una modifica del tuo codice che gestisce il requisito per consentire solo i valori 1-4
Names Default To Here( 1 );
num = 0;
input = 0;
w = New Window( "Prompt",
<<MODAL> 4 | str1 << get < 1,
str1 << set( 0 )
)
)
)
),
H List Box( Button Box( "Cancel" ), Button Box( "OK" ) )
),
);
If( w["button"] == 1,
input = w["str1"]
);
Show( input );</MODAL>Oggetto: obbligare l'utente a fornire input entro l'intervalloPotresti usare la funzione set in qualche modo.
Di seguito è riportato un esempio in cui il valore è impostato su 1 se l'utente tenta di inserire un valore inferiore a 1 e su 4 se l'utente inserisce un valore superiore a 4
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL> 4, this << set(4)
);
))
)
),
);
input = w["str1"];
show(input);</MODAL>