Forcer l'utilisateur à fournir une entrée dans la plageSalut, je suis assez nouveau dans JMP et je ne sais pas comment écrire un script qui génère une erreur pour empêcher l'utilisateur de saisir un numéro non valide. Je souhaite que l'utilisateur saisisse un nombre qui est finalement enregistré dans une variable, mais demande à nouveau de le saisir si le nombre est en dehors de la plage 1-4.
Voici ce que j'ai jusqu'à présent sans aucune vérification d'erreur:
Names Default To Here (1);
num = 0;
w = New Window( "Prompt",
<<MODAL></MODAL>
Toute aide ou suggestion pour y parvenir serait appréciée !
Ingénierie de la qualité et des procédésRe : Forcer l'utilisateur à fournir une entrée dans la plageAjoutez simplement une fenêtre de fermeture après l'appel de la fonction.
b1 = button box("First Program",
program1();
nw << close window();
),
Re : Forcer l'utilisateur à fournir une entrée dans la plageCela fonctionne parfaitement ! Merci encore!
Re : Forcer l'utilisateur à fournir une entrée dans la plageSi vous avez du code supplémentaire après la nouvelle fenêtre, vous pouvez changer la nouvelle fenêtre en fenêtre modale avec << modal (peut nécessiter d'autres petites modifications). Cet exemple fermera également la fenêtre modale si l'un des boutons du programme est enfoncé en utilisant <
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");Re : Forcer l'utilisateur à fournir une entrée dans la plageRééditer : il semble en fait que tout code venant après l'exécution du bouton dans la nouvelle fenêtre s'exécute AVANT les programmes liés au bouton pour une raison quelconque. Est-ce que quelqu'un sait pourquoi cela se produit?
Re : Forcer l'utilisateur à fournir une entrée dans la plageC'est super! Je pense que cela fonctionnerait pour mes besoins, merci pour le partage! Enfin, ce n'est pas une fonctionnalité super importante, mais savez-vous s'il existe un moyen d'appuyer sur le bouton qui exécute le programme, puis la fenêtre se ferme automatiquement sans que l'utilisateur n'appuie sur 'exit' ?
Re : Forcer l'utilisateur à fournir une entrée dans la plageSi vous référencez des fichiers sur un partage de fichiers auquel tous les utilisateurs peuvent accéder, cela fonctionnerait.
Vous pouvez également inclure les programmes à exécuter dans le code JSL principal lui-même en tant que fonctions distinctes.Voici un exemple :
// 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();
),
);
Consultez la documentation JSL pour plus d'informations sur les fonctions.
Re : Forcer l'utilisateur à fournir une entrée dans la plageSalut! C'est une excellente approche du problème. Je me demande cependant si je pourrais partager tous les scripts du programme afin que quiconque disposant des codes puisse exécuter les mêmes programmes liés aux boutons ? Ou ne serait-il pas possible que les chemins d'accès aux répertoires de fichiers soient uniques pour quiconque télécharge les scripts .jsl ?
Re : Forcer l'utilisateur à fournir une entrée dans la plageSi vous souhaitez exécuter différents programmes en fonction de ce que les utilisateurs sélectionnent (1-4), j'utiliserais plutôt des boutons.Voici à quoi cela ressemblerait :

Voici le code.Notez que j'utilise une boîte de panneau pour entourer les boutons et une boîte de ligne pour aligner les deux côtés des boîtes à boutons.Les programmes à exécuter sont stockés dans c:\myfiles et sont appelés program1.jsl, program2.jsl, etc. Modifiez le dossier et les noms de programme JSL en fonction de votre situation.
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();
),
);Re : Forcer l'utilisateur à fournir une entrée dans la plageMerci beaucoup encore, super utile!
Re : Forcer l'utilisateur à fournir une entrée dans la plageCela devrait être pareil, mais ça a l'air un peu bizarre. En utilisant l'exemple modal de Scripting Index :
Cette partie est essentiellement la condition 1 du if :
ex = New Window("Dialog() example",
<<MODAL></MODAL>Et voici le résultat1
ex["variable"]
et retourSinon :
"CANCEL"
Et parce que ces résultats et essentiellement les dernières lignes qui seront exécutées en fonction du résultat de la condition if, ils seront imprimés dans Log. Vous pouvez tester cela en suivant deux courts scripts :
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
Et si vous vouliez dire comment fonctionne la variable ex, vous pouvez le vérifier assez facilement en exécutant l'exemple dans l'index de script et en ajoutant Show(ex) à la fin.
Vous trouverez ci-dessous un exemple avec l'instruction if rendue un peu plus claire en ajoutant des crochets et des commentaires et j'ai également ajouté Show() pour la variable ex :
Names Default To Here(1);
If(
( //condition1 starts
ex = New Window("Dialog() example",
<<MODAL></MODAL>(notez que Show() "CANCEL" n'est pas la dernière ligne de code lorsque vous appuyez sur Annuler et qu'il ne sera pas imprimé, cela vous montrera également que la valeur de la variable sera mise à jour même si vous appuyez sur Annuler)
J'espère que j'ai tout expliqué correctement. Vous pouvez trouver plus d'informations dans l'aide JMP et le guide de création de scripts : Construire une fenêtre modale
Re : Forcer l'utilisateur à fournir une entrée dans la plageC'est parfait! Merci beaucoup! :^)
À des fins d'apprentissage, que signifie la fin du code ? Je connais généralement son If(condition 1, result 1, condition 2, result 2, ..... resultElse); mais je ne connais pas ça :
ex["button"] == 1;
,
ex["variable"],
"CANCEL
Re : Forcer l'utilisateur à fournir une entrée dans la plageJe pense que vous pouvez utiliser << On Validate() pour cela.
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>
Modifier:
Ou vouliez-vous dire griser/désactiver le bouton ?
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>Re : Forcer l'utilisateur à fournir une entrée dans la plageC'est une bonne idée! Malheureusement, avec cela, si l'utilisateur tape accidentellement 6 mais voulait vraiment taper 3 à la place, son entrée aura été automatiquement choisie comme 4. Désolé si le problème est un peu compliqué.
Re : Forcer l'utilisateur à fournir une entrée dans la plageY aurait-il un moyen d'empêcher l'utilisateur d'appuyer sur le bouton OK et de quitter la fenêtre à moins que la valeur ne soit comprise entre 1 et 4 ? Je pense que tel quel, l'utilisateur peut quitter la fenêtre et l'entrée sera définie sur 0.
Re : Forcer l'utilisateur à fournir une entrée dans la plageJe n'avais pas vu cela plus tôt (ou l'ai et l'ai oublié). Utilisation de << Définir le minimum et << Définir le maximum :
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL></MODAL>
Re : Forcer l'utilisateur à fournir une entrée dans la plageNe serait-il pas plus simple d'utiliser Radio Box pour une implémentation comme ça ?
Names Default To Here(1);
New Window("Example", rb = Radio Box({"True", "False", "None of the above"}, Print("Selection Changed")));Re : Forcer l'utilisateur à fournir une entrée dans la plageSalut, merci beaucoup pour la réponse! Je voudrais faire en sorte que l'utilisateur soit obligé de choisir un nombre dans la plage plutôt que de laisser le code s'adapter à l'erreur de l'utilisateur. Par exemple, je pense que chaque numéro sera lié à un morceau de code qui sera exécuté.
Names Default To Here (1);<BR />num = 0;<BR />w = New Window( "Prompt",
<<MODAL></MODAL>
Ensuite, je vais coder une instruction if où if input == 1, exécuter ce code, if input == 2, exécuter un morceau de code différent et ainsi de suite. Donc, pour ma situation, je ne veux pas que le nombre se corrige automatiquement à 1 ou 4 s'il est hors plage. Désolé si c'était confus!
Re : Forcer l'utilisateur à fournir une entrée dans la plageVous pouvez utiliser une zone d'édition numérique et définir des limites inférieures et supérieures pour l'entrée, et même déclarer si les limites sont valides ou non. Vous n'avez pas besoin d'écrire une expression ou une fonction à vérifier. Il est déjà intégré dans cette boîte de présentation.
Re : Forcer l'utilisateur à fournir une entrée dans la plageVoici une modification de votre code qui gère l'exigence de n'autoriser que les valeurs 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>Re : Forcer l'utilisateur à fournir une entrée dans la plageVous pouvez utiliser la fonction set d'une manière ou d'une autre.
Vous trouverez ci-dessous un exemple où la valeur est définie sur 1 si l'utilisateur essaie de saisir une valeur inférieure à 1 et sur 4 si l'utilisateur saisit au-dessus de 4
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL> 4, this << set(4)
);
))
)
),
);
input = w["str1"];
show(input);</MODAL>