Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenHallo, ich bin ziemlich neu bei JMP und bin mir nicht sicher, wie ich ein Skript schreiben soll, das einen Fehler ausgibt, um zu verhindern, dass der Benutzer eine ungültige Nummer 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.
Folgendes habe ich bisher ohne Fehlerprüfung:
Names Default To Here (1);
num = 0;
w = New Window( "Prompt",
<<MODAL></MODAL>
Jede mögliche Hilfe oder Vorschläge auf dem Bewerkstelligen dieses würde geschätzt!
SkripterstellungBetreff: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenFügen Sie nach dem Funktionsaufruf einfach ein Fenster schließen hinzu.
b1 = button box("First Program",
program1();
nw << close window();
),
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenDas funktioniert perfekt! Danke noch einmal!
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenWenn Sie nach New Window zusätzlichen Code haben, können Sie das neue Fenster mit << modal in ein modales Fenster ändern (möglicherweise sind einige andere kleine Änderungen erforderlich). Dieses Beispiel schließt auch das modale Fenster, wenn eine der Programmtasten mit <
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: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenNeubearbeitung: Es scheint tatsächlich, dass jeder Code, der nach der Schaltflächenausführung im neuen Fenster kommt, aus irgendeinem Grund VOR den mit der Schaltfläche verknüpften Programmen ausgeführt wird. Weiß jemand, warum dies geschieht?
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenDas ist klasse! Ich denke, das würde für meine Zwecke funktionieren, danke fürs Teilen! Letztendlich ist dies keine sehr wichtige Funktion, aber wissen Sie, ob es eine Möglichkeit gibt, die Schaltfläche zu drücken, die das Programm ausführt und das Fenster dann automatisch schließt, ohne dass der Benutzer "Beenden" drückt?
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenWenn Sie auf Dateien in einer Dateifreigabe verweisen, auf die alle Benutzer zugreifen können, würde dies funktionieren.
Sie könnten die auszuführenden Programme auch als separate Funktionen in den JSL-Hauptcode selbst einschließen.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.
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenHi! Das ist eine großartige Herangehensweise an das Problem. Ich frage mich jedoch, ob ich alle Programmskripte freigeben könnte, damit jeder mit den Codes 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, der die .jsl-Skripte herunterlädt, eindeutig wären?
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenWenn Sie je nach Auswahl des Benutzers (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 die Panel-Box verwende, um die Schaltflächen zu umgeben, und die Lineup-Box, 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 den Ordner und die 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();
),
);Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenNochmals vielen Dank, super hilfreich!
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenDas sollte das gleiche sein, aber es sieht ein bisschen seltsam aus. Verwenden des modalen Beispiels von Scripting Index:
Dieser Teil ist im Grunde Bedingung1 des if:
ex = New Window("Dialog() example",
<<MODAL></MODAL>Und das ist das Ergebnis1
ex["variable"]
und zurückSonst:
"CANCEL"
Und weil diese Ergebnisse und im Grunde die letzten Zeilen, die abhängig vom Ergebnis der if-Bedingung ausgeführt werden, in Log ausgegeben 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 gemeint haben, wie ex-Variable funktioniert, können Sie es ziemlich einfach überprüfen, indem Sie das Beispiel im Scripting-Index ausführen und am Ende Show(ex) hinzufügen.
Unten ist ein Beispiel mit der if-Anweisung, die durch das Hinzufügen von Klammern und Kommentaren etwas klarer gemacht wurde, und ich habe auch Show() für die ex-Variable hinzugefügt:
Names Default To Here(1);
If(
( //condition1 starts
ex = New Window("Dialog() example",
<<MODAL></MODAL>(Beachten Sie, dass aufgrund von Show() "CANCEL" nicht die letzte Codezeile ist, wenn Abbrechen gedrückt wird, und es 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 in der JMP-Hilfe und im Skriptleitfaden: Konstruieren Sie ein modales Fenster
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenDas ist perfekt! Ich danke dir sehr! :^)
Was bedeutet für Lernzwecke das Ende des Codes? Ich kenne normalerweise sein If(condition 1, result 1, condition 2, result 2, ..... resultElse); aber das ist mir nicht bekannt:
ex["button"] == 1;
,
ex["variable"],
"CANCEL
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenIch denke, Sie können dafür << On Validate() verwenden.
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>
Bearbeiten:
Oder meintest du die Schaltfläche grau/deaktivieren?
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenDas ist eine gute Idee! Wenn der Benutzer versehentlich 6 eingibt, aber eigentlich 3 eingeben wollte, wird seine Eingabe leider automatisch als 4 ausgewählt. Tut mir leid, wenn das Problem etwas kompliziert ist.
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenGibt es eine Möglichkeit, den Benutzer daran zu hindern, die Schaltfläche OK zu drücken und das Fenster zu verlassen, es sei denn, der Wert war 1-4? Ich denke, so wie es ist, kann der Benutzer das Fenster verlassen und die Eingabe wird auf 0 gesetzt.
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenHatte das früher nicht gesehen (oder habe und habe es vergessen). Mit << Set Minimum und << Set Maximum:
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL></MODAL>
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenWä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 zwingen, Eingaben innerhalb des Bereichs zu machenHallo, vielen Dank für die Antwort! Ich möchte es so machen, dass der Benutzer gezwungen ist, eine Zahl im Bereich auszuwählen, anstatt den Code an den Fehler des Benutzers anzupassen. Zum Beispiel denke ich, dass jede Zahl mit einem Codestück verknüpft ist, das ausgeführt wird.
Names Default To Here (1);<BR />num = 0;<BR />w = New Window( "Prompt",
<<MODAL></MODAL>
Danach werde ich eine if-Anweisung codieren, wobei if input == 1, diesen Code ausführen, if input == 2, einen anderen Code ausführen und so weiter. Für meine Situation möchte ich also nicht, dass die Nummer automatisch auf 1 oder 4 korrigiert wird, wenn sie außerhalb des Bereichs liegt. Sorry, wenn das verwirrend war!
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenSie 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 keinen Ausdruck oder keine Funktion schreiben, um dies zu überprüfen. Es ist in dieser Displaybox bereits eingebaut.
Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenHier ist eine Änderung 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>Re: Benutzer zwingen, Eingaben innerhalb des Bereichs zu machenSie könnten die Set-Funktion auf irgendeine Weise verwenden.
Unten sehen Sie ein Beispiel, in 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>