Gestion des expressions pour les boîtes d'affichage dynamiquesSalut les gens,
La manipulation de l'expression JSL me fait mal à la tête. Je vous serais reconnaissant de vous aider à ce sujet.
Voici un code qui fonctionne - fait trois boîtes "foo".
Names Default To Here( 1 );
dt = New Window( "Example",
Table Box(
Col Box(
"boxes",
Text Box( "Foo" ),
Text Box( "Foo" ),
Text Box( "Foo" )
)
)
);
Maintenant, je veux pouvoir attribuer dynamiquement le nombre de boîtes.
Je peux le faire fonctionner en construisant l'expression sous forme de chaîne, puis en l'enveloppant dans Eval (Parse ()). Mais cette solution est difficile à maintenir, ne s'adapte pas bien. Je suis sûr qu'il existe un moyen de le faire en utilisant Substitute () ou EvalExpr (), mais je ne peux pas le faire fonctionner. Grrr.
@brady_brady , @Joseph Morgan ? N'importe qui?
Re: Gestion des expressions pour les boîtes d'affichage dynamiquesJordan,
Est-ce que ça marche?
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: Gestion des expressions pour les boîtes d'affichage dynamiquesCela fonctionne, merci. Je suis toujours curieux de savoir s'il existe un moyen d'utiliser Substitute () ou similaire pour construire l'expression.Re: Gestion des expressions pour les boîtes d'affichage dynamiquesJe pense que cela dépend des circonstances. Dans une situation où je ne sais pas quel type de boîtes je dois ajouter, je peux créer une fonction d'ajout de boîtes qui utilise Substitute pour éviter d'écrire une fonction pour chaque type de boîte. Je trouve généralement que lorsque je dois utiliser Substitute, cela ne peut pas être fait plus facilement (ou pas du tout) d'une autre manière.
Re: Gestion des expressions pour les boîtes d'affichage dynamiquesHey Jordan, ci-dessous est un exemple - c'est ce que vous cherchez?
À votre santé,
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: Gestion des expressions pour les boîtes d'affichage dynamiquesOui, c'est ce que j'essayais de faire. Merci beaucoup Brady.
L'idée clé pour moi est que les deux solutions utilisent une série d'instructions << append () pour ajouter des zones de texte à un conteneur existant. J'essayais de créer et de remplir le conteneur en une seule instruction, et c'est là que j'ai raccroché. Itérer sur plusieurs déclarations est beaucoup plus propre que la façon dont j'ai essayé de le faire.
Re: Gestion des expressions pour les boîtes d'affichage dynamiquesVoici une autre façon de le faire, qui s'exécute probablement plus rapidement, mais je pense que c'est moins clair. De plus, je n'ai pas lié les zones de texte aux poignées, il serait donc plus difficile de mettre à jour les zones de texte si nécessaire.
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: Gestion des expressions pour les boîtes d'affichage dynamiquesJe sais que c'est un vieux fil. Mais c'est ça?
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: Gestion des expressions pour les boîtes d'affichage dynamiquesMerci Ian, une belle solution à la question posée.