Ausdrucksbehandlung für dynamische AnzeigefelderHallo Leute,
Durch die Behandlung von JSL-Ausdrücken tut mir der Kopf weh. Ich wäre dankbar für etwas Hilfe dabei.
Hier ist ein Code, der funktioniert - macht drei "foo" Boxen.
Names Default To Here( 1 );
dt = New Window( "Example",
Table Box(
Col Box(
"boxes",
Text Box( "Foo" ),
Text Box( "Foo" ),
Text Box( "Foo" )
)
)
);
Jetzt möchte ich die Anzahl der Boxen dynamisch zuordnen können.
Ich kann es zum Laufen bringen, indem ich den Ausdruck als Zeichenfolge ausbaue und ihn dann in Eval (Parse ()) einwickle. Diese Lösung ist jedoch schwer zu warten und lässt sich nicht gut skalieren. Ich bin mir sicher, dass es eine Möglichkeit gibt, dies mit Substitute () oder EvalExpr () zu tun, aber ich kann es nicht zum Laufen bringen. Grrr.
@brady_brady , @Joseph Morgan ? Jemand?
Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderJordan,
Funktioniert das?
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)
);Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderEs funktioniert, danke. Ich bin immer noch gespannt, ob es eine Möglichkeit gibt, Substitute () oder ähnliches zu verwenden, um den Ausdruck zu erstellen.Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderIch denke, es würde von den Umständen abhängen. In einer Situation, in der ich nicht weiß, welche Art von Feldern ich hinzufügen muss, kann ich eine Funktion zum Hinzufügen von Feldern erstellen, die Substitute verwendet, um das Schreiben einer Funktion für jeden Feldtyp zu vermeiden. Ich finde normalerweise, dass wenn Substitute verwendet werden muss, es nicht einfacher (oder überhaupt nicht) auf andere Weise gemacht werden kann.
Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderHey Jordan, unten ist ein Beispiel - ist es das, was du suchst?
Prost,
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 ]
)
)
);
Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderJa, das habe ich versucht. Vielen Dank Brady.
Die wichtigste Erkenntnis für mich ist, dass beide Lösungen eine Reihe von << append () - Anweisungen verwenden, um einem vorhandenen Container Textfelder hinzuzufügen. Ich habe versucht, den Container in einer Anweisung zu erstellen und zu füllen, und dort wurde ich aufgehängt. Das Iterieren über mehrere Anweisungen ist viel sauberer als die Art und Weise, wie ich es versucht habe.
Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderHier ist eine andere Möglichkeit, die wahrscheinlich schneller abläuft, aber ich denke, sie ist weniger klar. Außerdem habe ich die Textfelder nicht an Handles gebunden, sodass es schwieriger wäre, die Textfelder bei Bedarf zu aktualisieren.
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;
Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderIch weiß, dass es ein alter Thread ist. Aber ist es das?
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));Betreff: Ausdrucksbehandlung für dynamische AnzeigefelderDanke Ian, eine nette Lösung für die gestellte Frage.