Obligar al usuario a proporcionar una entrada dentro del rangoHola, soy bastante nuevo en JMP y no estoy seguro de cómo escribir un script que arroje un error para evitar que el usuario ingrese un número no válido. Quiero que el usuario ingrese un número que finalmente se guarde en una variable, pero que vuelva a solicitar la entrada si el número está fuera del rango 1-4.
Esto es lo que tengo hasta ahora sin ningún error de comprobación:
Names Default To Here (1);
num = 0;
w = New Window( "Prompt",
<<MODAL></MODAL>
¡Cualquier ayuda o sugerencia para lograr esto sería apreciada!
secuencias de comandosRe: Obligar al usuario a proporcionar una entrada dentro del rangoSimplemente agregue una ventana de cierre después de la llamada a la función.
b1 = button box("First Program",
program1();
nw << close window();
),
Re: Obligar al usuario a proporcionar una entrada dentro del rango¡Eso funciona perfectamente! ¡Gracias de nuevo!
Re: Obligar al usuario a proporcionar una entrada dentro del rangoSi tiene código adicional después de la Nueva ventana, puede cambiar la nueva ventana a la ventana modal con << modal (puede requerir algunos otros pequeños cambios). Este ejemplo también cerrará la ventana modal si se presiona cualquiera de los botones del programa usando <
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: Obligar al usuario a proporcionar una entrada dentro del rangoVuelva a editar: en realidad, parece que cualquier código que viene después de la ejecución del botón dentro de la nueva ventana se está ejecutando ANTES de que los programas vinculados al botón por alguna razón. ¿Alguien sabe por qué ocurre esto?
Re: Obligar al usuario a proporcionar una entrada dentro del rango¡Eso es genial! Creo que eso funcionaría para mis propósitos, ¡gracias por compartir! Por último, esta no es una funcionalidad muy importante, pero ¿sabe si hay una forma de presionar el botón que ejecuta el programa y luego la ventana se cierra automáticamente sin que el usuario presione 'salir'?
Re: Obligar al usuario a proporcionar una entrada dentro del rangoSi hace referencia a archivos en un recurso compartido de archivos al que todos los usuarios pueden acceder, funcionaría.
También puede incluir los programas para ejecutar en el propio código JSL principal como funciones separadas.Aquí hay un ejemplo:
// 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();
),
);
Eche un vistazo a la documentación de JSL para obtener más información sobre las funciones.
Re: Obligar al usuario a proporcionar una entrada dentro del rango¡Hola! Ese es un gran enfoque para el problema. Sin embargo, me pregunto si podría compartir todos los scripts del programa para que cualquier persona con los códigos pueda ejecutar los mismos programas vinculados a los botones. ¿O no sería posible si las rutas del directorio de archivos fueran exclusivas para cualquiera que descargue los scripts .jsl?
Re: Obligar al usuario a proporcionar una entrada dentro del rangoSi desea ejecutar diferentes programas según lo que seleccionen los usuarios (1-4), usaría botones en su lugar.Así es como se vería:

Aquí está el código.Tenga en cuenta que estoy usando el cuadro del panel para rodear los botones y el cuadro de alineación para alinear ambos lados de los cuadros de botones.Los programas que se ejecutarán se almacenan en c:\myfiles y se denominan program1.jsl, program2.jsl, etc. Cambie la carpeta y los nombres de los programas JSL para adaptarlos a su situación.
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: Obligar al usuario a proporcionar una entrada dentro del rango¡Muchas gracias de nuevo, súper útil!
Re: Obligar al usuario a proporcionar una entrada dentro del rangoEso debería ser lo mismo, pero se ve un poco raro. Usando el ejemplo modal de Scripting Index:
Esta parte es básicamente la condición 1 del if:
ex = New Window("Dialog() example",
<<MODAL></MODAL>Y este es el resultado1
ex["variable"]
y devolverElse:
"CANCEL"
Y debido a que esos resultados y básicamente las últimas líneas que se ejecutarán dependiendo del resultado de la condición if, se imprimirán en Log. Puede probar esto siguiendo dos guiones breves:
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
Y si se refería a cómo funciona la variable ex, puede verificarlo con bastante facilidad ejecutando el ejemplo en el índice de secuencias de comandos y agregando Mostrar (ex) al final.
A continuación se muestra un ejemplo con la declaración if que se hizo un poco más clara al agregar corchetes y comentarios y también agregué Show() para la variable ex:
Names Default To Here(1);
If(
( //condition1 starts
ex = New Window("Dialog() example",
<<MODAL></MODAL>(nota debido a Show() "CANCEL" no es la última línea de código cuando se presiona Cancelar y no se imprimirá, esto también le mostrará que el valor de la variable se actualizará incluso si se presiona cancelar)
Espero haber explicado todo correctamente. Puede encontrar más información en la Guía de secuencias de comandos y ayuda de JMP: Construir una ventana modal
Re: Obligar al usuario a proporcionar una entrada dentro del rango¡Eso es perfecto! ¡Muchas gracias! :^)
Para fines de aprendizaje, ¿qué significa el final del código? Sé que generalmente es If (condición 1, resultado 1, condición 2, resultado 2, ..... resultElse); pero no estoy familiarizado con esto:
ex["button"] == 1;
,
ex["variable"],
"CANCEL
Re: Obligar al usuario a proporcionar una entrada dentro del rangoCreo que puedes usar << On Validate() para eso.
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>
Editar:
¿O quisiste decir atenuar/desactivar el botón?
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>Re: Obligar al usuario a proporcionar una entrada dentro del rango¡Es una buena idea! Desafortunadamente con esto, si el usuario escribe accidentalmente 6 pero realmente quería escribir 3 en su lugar, su entrada se habrá elegido automáticamente como 4. Lo siento si el problema es un poco complicado.
Re: Obligar al usuario a proporcionar una entrada dentro del rango¿Habría alguna forma de evitar que el usuario presione el botón Aceptar y salga de la ventana a menos que el valor sea 1-4? Creo que tal como está, el usuario puede salir de la ventana y la entrada se establecerá en 0.
Re: Obligar al usuario a proporcionar una entrada dentro del rangoNo había visto esto antes (o lo he olvidado). Usando << Establecer Mínimo y << Establecer Máximo:
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL></MODAL>
Re: Obligar al usuario a proporcionar una entrada dentro del rango¿No sería más sencillo usar Radio Box para una implementación como esa?
Names Default To Here(1);
New Window("Example", rb = Radio Box({"True", "False", "None of the above"}, Print("Selection Changed")));Re: Obligar al usuario a proporcionar una entrada dentro del rangoHola, muchas gracias por la respuesta! Me gustaría que el usuario se vea obligado a elegir un número dentro del rango en lugar de que el código se ajuste al error del usuario. Por ejemplo, estoy pensando que cada número se vinculará a un fragmento de código que se ejecutará.
Names Default To Here (1);<BR />num = 0;<BR />w = New Window( "Prompt",
<<MODAL></MODAL>
Luego, codificaré una declaración if donde if input == 1, ejecute este código, if input == 2, ejecute una pieza de código diferente y así sucesivamente. Entonces, para mi situación, no quiero que el número se corrija automáticamente a 1 o 4 si está fuera de rango. ¡Lo siento si eso fue confuso!
Re: Obligar al usuario a proporcionar una entrada dentro del rangoPuede usar un cuadro de edición de números y establecer límites inferior y superior para la entrada, e incluso declarar si los límites son válidos o no. No necesita escribir una expresión o una función para verificar. Ya está integrado en esta caja de presentación.
Re: Obligar al usuario a proporcionar una entrada dentro del rangoAquí hay una modificación de su código que maneja el requisito de permitir solo valores 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: Obligar al usuario a proporcionar una entrada dentro del rangoPodrías usar la función set de alguna manera.
A continuación se muestra un ejemplo en el que el valor se establece en 1 si el usuario intenta ingresar un valor por debajo de 1 y en 4 si el usuario ingresa por encima de 4
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL> 4, this << set(4)
);
))
)
),
);
input = w["str1"];
show(input);</MODAL>