JMP-Verlangsamung nach „On Close“ mit AuswahlfensterHallo,
Ich versuche, Benutzer dazu aufzufordern, eine Auswahl von Gruppen aus einem Fenster zu treffen, das sich zu Beginn eines Skripts öffnet und ein Objekt definiert, das für den Rest des Skripts verwendet werden soll. Wenn der Benutzer das Schaltflächenfeld auswählt und verwendet, funktioniert es einwandfrei, aber wenn er es mit dem Fenster schließt, wird JMP langsamer und es wird unmöglich, das Skriptfenster zu bearbeiten, ohne mit der rechten Maustaste zu klicken und „Skript stoppen“ zu wählen. Hat jemand eine Idee, was hier fehlt?
Names Default to Here (1);
groupsel=Expr(
done = 0;//Track if selection made
nwcurr = New Window("Select Group",
V List Box(
Text Box("Please select a group:"),
rb = Radio Box({"A", "B", "C"}),
Button Box("OK",
// Set the selected currency based on the user's choice
group = rb << Get Selected;
nwcurr << Close Window; // Close the modal window after selection
done = 1; // Mark the selection as done
)
)
);
nwcurr << On Close(
Throw("No selection made. Script stopped."),Stop();
);
// Wait loop until the selection is made
Wait(0.1); // Small wait to reduce CPU usage
while(done == 0, Wait(0.1)); // Loop until 'done' is set to 1
);
Eval(groupsel);Automatisierung und SkriptingBetreff: JMP wird langsamer, nachdem es mit Auswahlfenster geschlossen wurdeIhre Variable „done“ wird immer 0 sein, wenn das Fenster gerade geschlossen wird, sodass Sie in der While-Schleife stecken bleiben.
Betreff: JMP wird langsamer, nachdem es mit Auswahlfenster geschlossen wurdeDies könnte ein guter Zeitpunkt sein, ein modales Fenster zu verwenden. Sie benötigen die Variable „done“ nicht.
Names Default To Here( 1 );
groupsel = Expr(
nwcurr = New Window( "Select Group",
<<MODAL></MODAL>
Betreff: JMP wird langsamer, nachdem es mit Auswahlfenster geschlossen wurdeEine andere Möglichkeit außerhalb der Verwendung eines modalen Fensters besteht darin, die Aktionen, die Sie ausführen möchten, in ihre eigene Funktion/Ausdruck zu verschieben, die ausgeführt wird, wenn OK gedrückt wird.
Names Default To Here(1);
expr_actions = Expr(
group = rb << Get Selected;
show(group);
);
groupsel = Expr(
nwcurr = New Window("Select Group",
V List Box(
Text Box("Please select a group:"),
rb = Radio Box({"A", "B", "C"}),
Button Box("OK",
expr_actions;
nwcurr << Close Window;
)
)
);
);
Eval(groupsel);
Modal ist einfacher, bietet aber je nach Anwendungsfall eine schlechtere Benutzererfahrung (zumindest meiner Meinung nach).
Betreff: JMP wird langsamer, nachdem es mit Auswahlfenster geschlossen wurdeVerwenden Sie einen der vorherigen Vorschläge. Beispiele, die beim Schreiben einer modalen Lösung hilfreich sein können, finden Sie unter „Modale Dialoge“ .
Einige der Verhaltensweisen, die Sie beobachten, sind auf diesen Code zurückzuführen:
nwcurr << On Close(
Throw("No selection made. Script stopped."),Stop();
);
Der OnClose-Ausdruck muss 0 oder 1 ergeben; 0 (falsch) bedeutet, dass das Schließen des Fensters nicht zugelassen werden darf, und 1 (wahr) bedeutet, dass das Schließen des Fensters zugelassen werden soll. Ich bin nicht sicher, was mit dem Throw passiert, aber wahrscheinlich nichts Gutes; es wird kein Wert zurückgegeben. Das stop() wird von JMP nie gesehen; es scheint ein zusätzlicher, nicht verwendeter Parameter zu sein. Verwenden Sie ein Semikolon zwischen Anweisungen.