Hola. Me pregunto si hay un método conveniente para que un cuadro de botones sepa de alguna manera dónde se encuentra dentro de un cuadro de alineación. Mis detalles:
JMP Pro 16.2.0
Tengo un script que crea una ventana con un cuadro LineUp. En cada celda, hay un cuadro de botón en el que quiero realizar una acción diferente, según la columna en la que aparece el botón. Por ejemplo:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i],
//Insert code for the button to somehow identify which button it is within lub.
Speak(list2[i])
);
lub << Append(tb);
lub << Append(bb);
);
New Window("Test", lub);Si ejecuto el script tal como está, obtengo:

Pero cuando hago clic en cualquiera de los botones, aparece el error:
"Rango de subíndice en acceso o evaluación de 'lista2[/*###*/i]', lista2[/*###*/I]"
Entiendo este error porque no hay forma de que el cuadro de botones recuerde el valor de "i" cuando se ejecuta. Mi pregunta: ¿hay algún método que pueda usar que permita que el cuadro del botón se "identifique a sí mismo" donde se encuentra en el cuadro de alineación cuando se presiona, y use ese valor como el índice list2 en el script del botón?
Actualmente estoy usando JSL Quotes y el comando Substitute para crear los botones. En ese caso, escribo el contenido del bucle For como una cotización JSL y sustituyo el valor de i, luego Eval (Parse ()). Sin embargo, esto es torpe, y me pregunto si hay una mejor manera, como un comando "bb << Obtener ubicación" o "bb << Contar hermanos". Estos comandos no existen, por supuesto, pero ¿quizás haya otra técnica?
¡Gracias!
¡Gracias! Esta es una solución aún más elegante.
Como respuesta a la pregunta original del OP, la respuesta es sí y es bastante simple.Aquí hay un ejemplo:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i], <<SET function=""></SET>Hola Jarmo. El Eval Insert/Eval Expr/Parse Combo es similar al JSLQuote/Substitute/Parse Combo que estoy usando actualmente. Pero las otras soluciones que proporcionó fueron exactamente el tipo de cosas que estaba buscando. ¡Gracias!
No conozco ningún método directo para obtener la ubicación, pero podría calcular la "ubicación" o podría insertar el conocimiento en el botón con Inserte una expresión en otra usando Eval Insert, Eval Expr, Parse y Substitute . También puede usar << obtener el nombre del botón para obtener el texto del botón; o << prev sib con la referencia correcta para obtener texto en el cuadro de texto; puede "ocultar" el texto en la información sobre herramientas del botón (o índice) ... y hay muchas más opciones, dependiendo de lo que quiera hacer y cómo quiera hacerlo.
Ver más...