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 ) ) );
);
回覆: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
);