JSL-Schaltflächenfeld: Variablen zum Zeitpunkt der Schaltflächenerstellung korrigierenMein Skript erstellt eine Liste von Schaltflächen mit einer for-Schleife. jede Schaltfläche ruft eine Funktion "RepGen" auf, die den Namen der Schaltfläche für eine Eingabe benötigt. Das Verhalten der Schaltfläche scheint jedoch erst ausgewertet zu werden, wenn die Schaltfläche gedrückt wird. Zu diesem Zeitpunkt hat die for-Schleife die Variable mit dem Namen der Schaltfläche überschrieben. Gibt es eine Möglichkeit, diese Variable zum Zeitpunkt der Erstellung der Schaltfläche auszuwerten, anstatt wenn sie gedrückt wird? Oder gibt es einen besseren Weg, dies zu tun?
dtSum = dt << Summary( Group( :ColX ) );
For( i = 1, i <= N Rows( dtSum ), i++,
varName = dtSum:ColX[i];
obparts << append( Button Box( varName, RepGen( varName ) ) );
);
Betreff: JSL-Schaltflächenfeld: Variablen zum Zeitpunkt der Schaltflächenerstellung korrigierenMit Eval(EvalExpr()) oder Eval(Substitute()) können Sie Laufzeitvariablen statisch machen.Sehen Sie sich den Scripting-Index an, um Beispiele zu ihrer Verwendung zu finden.
Names Default to Here( 1 );
RepGen = function({btn_name},
{DEFAULT LOCAL},
print(btn_name);
);
vlb = Vlistbox();
btns = {"Btn 1", "Other", "Button 2 (or3)"};
for(i=1, i<=nitems(btns), i++,
vlb << Append(
Eval(
//run just this block to show that the buttons are getting evaluated at creation time
EvalExpr(
Buttonbox(btns[i], RepGen(Expr(btns[i])))//the expr will evaluate inside the evalexpr
)
)
)
);
new window("Test",
vlb
);