Manejo de expresiones para cuadros de visualización dinámicosHola amigos,
El manejo de expresiones JSL me duele la cabeza. Agradecería un poco de ayuda con esto.
Aquí hay un código que funciona: hace tres cuadros "foo".
Names Default To Here( 1 );
dt = New Window( "Example",
Table Box(
Col Box(
"boxes",
Text Box( "Foo" ),
Text Box( "Foo" ),
Text Box( "Foo" )
)
)
);
Ahora quiero poder asignar dinámicamente el número de cajas.
Puedo hacer que funcione construyendo la expresión como una cadena, luego envolviéndola en Eval (Parse ()). Pero esta solución es difícil de mantener, no escala bien. Estoy seguro de que hay una manera de hacer esto usando Substitute () o EvalExpr (), pero no puedo hacer que funcione. Grrr.
@brady_brady , @Joseph Morgan ? ¿Nadie?
Re: Manejo de expresiones para cuadros dinámicosJordán,
¿Esto funciona?
Names Default To Here( 1 );
dt = New Window( "Example",
Border Box(
Top(10),Bottom(10),Left(10),Right(10),
V List Box(
H List Box(
Text Box("How many Text Boxes?: "),
nebNBoxes = Number Edit Box(0),
Button Box("Go",buildBoxes)
),
tblBox = Table Box()
)
)
);
buildBoxes = Expr(
colBox = Col Box("boxes");
nBoxes = nebNBoxes << Get;
For(i=1,i<=nBoxes,i++,
colBox << Append(Text Box("Foo " || Char(i)));
);
If(!Is Empty(tblBox << Child), (tblBox << Child) << Delete);
tblBox << Append(colBox)
);Re: Manejo de expresiones para cuadros dinámicosFunciona, gracias. Todavía tengo curiosidad por saber si hay una manera de usar Substitute () o similar para construir la expresión.Re: Manejo de expresiones para cuadros dinámicosCreo que dependerá de las circunstancias. En una situación en la que no sé qué tipo de cuadros necesito agregar, puedo crear una función de agregar cuadros que use Sustituir para evitar escribir una función para cada tipo de cuadro. Normalmente encuentro que cuando tengo que usar Substitute, no se puede hacer más fácilmente (o en absoluto) de otra manera.
Re: Manejo de expresiones para cuadros dinámicosHola Jordan, a continuación hay un ejemplo: ¿es esto lo que estás buscando?
Salud,
Brady
Names Default To Here( 1 );
//assume the list below is why you need to do this dynamically
textboxList = Words( "Tom,Jerry,Bugs,Daffy,Taz", "," );
nw = New Window( "Sample", vlb = V List Box() );
addTextBoxExpr = Expr(
vlb << append( _TBX = Text Box( _TEXT ) )
);
For( i = 1, i <= N Items( textboxList ), i++,
Eval(
Substitute( Name Expr( addTextBoxExpr ),
Expr( _TBX ), Parse( Eval Insert( "tb^i^" ) ),
Expr( _TEXT ), textboxList[ i ]
)
)
);
Re: Manejo de expresiones para cuadros dinámicosSí, eso es lo que estaba tratando de hacer. Muchas gracias Brady.
La idea clave para mí es que ambas soluciones usan una serie de declaraciones << append () para agregar cuadros de texto a un contenedor existente. Estaba tratando de crear y llenar el contenedor en una declaración, y ahí es donde me colgué. Iterar sobre varias declaraciones es mucho más limpio que la forma en que intenté hacerlo.
Re: Manejo de expresiones para cuadros dinámicosAquí hay otra forma de hacerlo, que probablemente se ejecuta más rápido, pero creo que está menos claro. Además, no he vinculado los cuadros de texto a los identificadores, por lo que sería más difícil actualizar los cuadros de texto si fuera necesario.
Names Default To Here( 1 );
//assume the list below is why you need to do this dynamically
textboxList = Words( "Tom,Jerry,Bugs,Daffy,Taz", "," );
nwExpr = Expr( New Window( "Sample" ) );
vlbExpr = Expr( V List Box() );
For( i = 1, i <= N Items( textboxList ), i++,
Eval( Eval Expr(
Insert Into( vlbExpr, Text Box( Expr( textboxList[i] ) ) )
) )
);
Insert Into( nwExpr, vlbExpr );
nwExpr;
Re: Manejo de expresiones para cuadros dinámicosSé que es un hilo viejo. ¿Pero es esto?
NamesDefaultToHere(1);
n = 15; // Change me
cb = ColBox("My Boxes");
for(i=1, i<=n, i++, cb << append(TextBox("Item "||Char(i))));
NewWindow("Sample", TableBox(cb));Re: Manejo de expresiones para cuadros dinámicosGracias Ian, una buena solución a la pregunta planteada.