JSL ボタン ボックス: ボタン作成時の変数を修正私のスクリプトは、for ループを使用してボタンのリストを作成します。各ボタンは、入力にボタンの名前を必要とする関数「RepGen」を呼び出します。 ボタンの動作は、ボタンが押されるまで評価されないようですが、その時点で for ループがボタン名を含む変数を上書きします。 ボタンが押されたときではなく、ボタンが作成されたときにこの変数を評価する方法はありますか? または、これを行うより良い方法はありますか?
dtSum = dt << Summary( Group( :ColX ) );
For( i = 1, i <= N Rows( dtSum ), i++,
varName = dtSum:ColX[i];
obparts << append( Button Box( varName, RepGen( varName ) ) );
);
Re: JSLボタンボックス: ボタン作成時の変数を修正Eval(EvalExpr()) または Eval(Substitute()) を使用すると、ランタイム変数を静的にすることができます。それらの使用方法の例については、スクリプトの索引を確認してください。
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
);