Erzwingen Sie, dass der Benutzer eine Eingabe innerhalb des zulässigen Bereichs vornimmtHallo, ich bin relativ neu bei JMP und weiß nicht, wie ich ein Skript schreiben soll, das einen Fehler auslöst, um zu verhindern, dass der Benutzer eine ungültige Zahl eingibt. Ich möchte, dass der Benutzer eine Zahl eingibt, die schließlich in einer Variablen gespeichert wird, aber erneut zur Eingabe auffordert, wenn die Zahl außerhalb des Bereichs 1-4 liegt.
Dies ist, was ich bisher ohne Fehlerprüfung habe:
Names Default To Here (1);
num = 0;
w = New Window( "Prompt",
<<MODAL></MODAL>
Für jede Hilfe oder jeden Vorschlag, dies zu erreichen, wären wir dankbar!
Qualitäts- und VerfahrenstechnikBetreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenFügen Sie einfach nach dem Funktionsaufruf ein Schließfenster hinzu.
b1 = button box("First Program",
program1();
nw << close window();
),
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenDas funktioniert perfekt! Danke noch einmal!
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenWenn Sie nach dem neuen Fenster zusätzlichen Code haben, können Sie das neue Fenster mit << modal in ein modales Fenster ändern (möglicherweise sind weitere kleine Änderungen erforderlich). In diesem Beispiel wird auch das modale Fenster geschlossen, wenn eine der Programmschaltflächen mithilfe von <
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");Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenÜberarbeitung: Es scheint tatsächlich, dass aus irgendeinem Grund jeder Code, der nach der Schaltflächenausführung im neuen Fenster kommt, VOR den mit der Schaltfläche verknüpften Programmen ausgeführt wird. Weiß jemand, warum das passiert?
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenDas ist großartig! Ich denke, das würde für meine Zwecke funktionieren, danke fürs Teilen! Schließlich ist dies keine besonders wichtige Funktion, aber wissen Sie, ob es eine Möglichkeit gibt, die Taste zu drücken, die das Programm ausführt und dann das Fenster automatisch schließt, ohne dass der Benutzer auf „Beenden“ drückt?
Betreff: Benutzer dazu zwingen, eine Eingabe innerhalb des zulässigen Bereichs vorzunehmenWenn Sie auf Dateien in einer Dateifreigabe verweisen, auf die alle Benutzer zugreifen können, würde es funktionieren.
Sie können die auszuführenden Programme auch als separate Funktionen in den Haupt-JSL-Code selbst einbinden.Hier ist ein Beispiel:
// 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();
),
);
Weitere Informationen zu Funktionen finden Sie in der JSL-Dokumentation.
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenHallo! Das ist eine großartige Herangehensweise an das Problem. Ich frage mich jedoch, ob ich alle Programmskripte teilen könnte, damit jeder, der über die Codes verfügt, dieselben Programme ausführen kann, die mit den Schaltflächen verknüpft sind. Oder wäre es nicht möglich, wenn die Dateiverzeichnispfade für jeden eindeutig wären, der die .jsl-Skripte herunterlädt?
Betreff: Benutzer dazu zwingen, eine Eingabe innerhalb des zulässigen Bereichs vorzunehmenWenn Sie je nach Benutzerauswahl (1-4) unterschiedliche Programme ausführen möchten, würde ich stattdessen Schaltflächen verwenden.So würde es aussehen:

Hier ist der Code.Beachten Sie, dass ich eine Bedienfeldbox verwende, um die Schaltflächen zu umgeben, und eine Anordnungsbox, um beide Seiten der Schaltflächenboxen auszurichten.Die auszuführenden Programme werden in c:\myfiles gespeichert und heißen program1.jsl, program2.jsl usw. Ändern Sie die Ordner- und JSL-Programmnamen entsprechend Ihrer 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();
),
);Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenNochmals vielen Dank, super hilfreich!
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenDas sollte dasselbe sein, aber es sieht etwas seltsam aus. Unter Verwendung des modalen Beispiels aus Scripting Index:
Dieser Teil ist im Grunde die Bedingung 1 des if:
ex = New Window("Dialog() example",
<<MODAL></MODAL>Und das ist das Ergebnis1
ex["variable"]
und returnElse:
"CANCEL"
Und weil diese Ergebnisse und im Grunde die letzten Zeilen, die abhängig vom Ergebnis der if-Bedingung ausgeführt werden, im Protokoll gedruckt werden. Sie können dies testen, indem Sie zwei kurzen Skripten folgen:
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
Und wenn Sie wirklich gemeint haben, wie die ex-Variable funktioniert, können Sie es ziemlich einfach überprüfen, indem Sie das Beispiel im Skriptindex ausführen und am Ende Show(ex) hinzufügen.
Unten ist ein Beispiel, bei dem die if-Anweisung durch das Hinzufügen von Klammern und Kommentaren etwas klarer gemacht wurde. Außerdem habe ich Show() für die ex-Variable hinzugefügt:
Names Default To Here(1);
If(
( //condition1 starts
ex = New Window("Dialog() example",
<<MODAL></MODAL>(Hinweis: Aufgrund von Show() ist „CANCEL“ nicht die letzte Codezeile, wenn „Abbrechen“ gedrückt wird, und wird nicht gedruckt. Dies zeigt Ihnen auch, dass der Variablenwert aktualisiert wird, selbst wenn „Abbrechen“ gedrückt wird.)
Hoffentlich habe ich alles richtig erklärt. Weitere Informationen finden Sie im JMP-Hilfe- und Skripthandbuch: Konstruieren Sie ein modales Fenster
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenDas ist großartig! Vielen Dank! :^)
Was bedeutet zu Lernzwecken das Ende des Codes? Ich weiß, dass es normalerweise If(condition 1, result 1,condition 2, result 2, ..... resultElse); aber das kenne ich nicht:
ex["button"] == 1;
,
ex["variable"],
"CANCEL
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenIch denke, Sie können dafür << On Validate() verwenden.
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>
Bearbeiten:
Oder meinten Sie, die Schaltfläche auszugrauen/deaktivieren?
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenDas ist eine gute Idee! Wenn der Benutzer versehentlich 6 eintippt, aber stattdessen eigentlich 3 eingeben wollte, wird seine Eingabe leider automatisch als 4 ausgewählt. Tut mir leid, wenn das Problem etwas kompliziert ist.
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenGibt es eine Möglichkeit zu verhindern, dass der Benutzer die Schaltfläche „OK“ drückt und das Fenster verlässt, es sei denn, der Wert liegt zwischen 1 und 4? Ich denke so wie es ist, kann der Benutzer das Fenster verlassen und die Eingabe wird auf 0 gesetzt.
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenHatte das noch nie zuvor gesehen (oder habe es schon vergessen und vergessen). Mit << Minimum festlegen und << Maximum festlegen:
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL></MODAL>
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenWäre es nicht einfacher, Radio Box für eine solche Implementierung zu verwenden?
Names Default To Here(1);
New Window("Example", rb = Radio Box({"True", "False", "None of the above"}, Print("Selection Changed")));Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenHallo, vielen Dank für die Antwort! Ich möchte es so gestalten, dass der Benutzer gezwungen wird, eine Zahl im Bereich auszuwählen, anstatt den Code an den Fehler des Benutzers anpassen zu lassen. Ich denke zum Beispiel, dass jede Zahl mit einem Code verbunden ist, der ausgeführt wird.
Names Default To Here (1);<BR />num = 0;<BR />w = New Window( "Prompt",
<<MODAL></MODAL>
Anschließend werde ich eine if-Anweisung codieren, bei der bei Eingabe == 1 dieser Code ausgeführt wird, bei Eingabe == 2 ein anderer Code ausgeführt wird und so weiter. In meiner Situation möchte ich also nicht, dass die Zahl automatisch auf 1 oder 4 korrigiert wird, wenn sie außerhalb des Bereichs liegt. Tut mir leid, wenn das verwirrend war!
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenSie können ein Zahlenbearbeitungsfeld verwenden und Unter- und Obergrenzen für die Eingabe festlegen und sogar angeben, ob die Grenzen gültig sind oder nicht. Sie müssen zur Überprüfung keinen Ausdruck oder keine Funktion schreiben. Es ist bereits in dieser Displaybox eingebaut.
Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenHier ist eine Modifikation Ihres Codes, die die Anforderung behandelt, nur die Werte 1–4 zuzulassen
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>Betreff: Benutzer dazu zwingen, Eingaben innerhalb des zulässigen Bereichs vorzunehmenSie könnten die Set-Funktion auf irgendeine Weise verwenden.
Unten sehen Sie ein Beispiel, bei dem der Wert auf 1 gesetzt wird, wenn der Benutzer versucht, einen Wert unter 1 einzugeben, und auf 4, wenn der Benutzer einen Wert über 4 eingibt
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL> 4, this << set(4)
);
))
)
),
);
input = w["str1"];
show(input);</MODAL>