Lista de cuadros de botones: ¿en qué botón acabo de hacer clic?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Estoy creando una lista alineada de cuadros de botones dentro de una ventana (no sé cuántos de ellos habrá hasta que se ejecute el script), como se muestra a continuación.Obviamente, cuando hago clic en cualquiera de los botones, necesito que realice una acción.Sin embargo, esa acción dependerá del número del botón, por lo que necesito saber en qué botón hice clic... y, a menos que esté pasando por alto algo obvio, no veo una manera fácil de determinarlo.¿Alguien puede decirme cómo puedo hacerlo, por favor?
Expr_Hacer_Algo = exprés ( /* ¿Qué puedo escribir aquí que me diga qué botón presioné? */ ) ;
lubricante = caja de alineación ( ncol ( 4 )) ;
para ( i = 1 , i <= 12 , i ++, lubricante << adjuntar ( Caja de botones ( "Botón " || carbonizarse ( i ) , Expr_Hacer_Algo )) ) ;
noroeste = nueva ventana ( "Prueba" , lubricante ) ;
Lamentablemente, hay motivos por los que no puedo hacer esto con un control diferente, como un cuadro combinado, que simplemente devolvería el elemento que seleccioné.Me parece que lo que realmente necesito es algo así como un comando "Botón activo actual() << obtener nombre del botón", pero supongo que no hay ninguno, ¿verdad?
Muchas gracias por cualquier sugerencia recibida.
[Nota al pie: Acabo de descubrir una discusión relacionada entre "Volf", "Stig" y yo hace un par de años que bien puede ayudar con esto en https://communities.sas.com/message/42855#42855 , pero dejaré la pregunta abierta de todos modos en caso de que haya otros enfoques para esto]
El mensaje fue editado por: David Q/R
Re: Lista de cuadros de botones: ¿en qué botón acabo de hacer clic?Agregaría una asignación de variable antes de llamar a expr_do_something. Luego, dentro de expr_do_something, comprobaría esta variable.
Expr_Hacer_Algo= expr(*¿Qué puedo escribir aquí que me indique qué botón he presionado?*/);
el= cuadro de alineación(suboficial(4));
para(i=1, i<=12, i++,lub << append ( Caja de botones ( "Botón " || carbonizarse ( i ) , cual_botón = i; Expr_Hacer_Algo )));
nw = nueva ventana ( "Prueba" , o ) ;
Re: Lista de cuadros de botones: ¿en qué botón acabo de hacer clic?Espero que which_button sea el mismo (13 en este caso) independientemente del botón en el que se haga clic.
Aunque "siento" que debería haber una forma más sencilla, la única solución que he conseguido que funcione es mediante alguna manipulación de cadenas y análisis de lub<
Hacer_algo = "imprimir(lub[Buttonbox(^i^)]< ;
lub = Cuadro de alineación ( Columna N ( 4 ) ) ;
Para ( i = 1 , i <= 12 , i ++,
Evaluar (
Analizar (
"lub << append( Botón Cuadro( \!" Botón " || Carácter ( i ) || "\!"" || ", " ||
Evaluar Insertar ( Hacer_Algo ) || "))"
)
)
);
nw = Nueva ventana ( "Prueba" , o ) ;
Re: Lista de cuadros de botones: ¿en qué botón acabo de hacer clic?Ya lo sospechaba, y casi seguro que acabaré haciendo algo parecido. A menudo resuelvo problemas como este configurándolos como texto y luego analizándolos, así que me tranquiliza saber que no se me escapa nada obvio.
¡Muchas gracias!
Re: Lista de botones - ¿En qué botón acabo de hacer clic?No estoy seguro de que esto aún te resulte relevante, pero creo que he encontrado una forma más directa de abordar este problema:
Expr_Do_Something = expr<STRONG>(</STRONG>this << Get Button Name() <STRONG>)</STRONG>;<BR />lub = lineupbox<STRONG>(</STRONG>ncol<STRONG><SPAN>(</SPAN><SPAN>4</SPAN><SPAN>))</SPAN></STRONG>;<BR />for(i=1, i<=12, i++, lub<< append(Button Box("Button "|| char(i), << set Function(Function({this}, Expr_Do_Something)))));