如何在循環中生成按鈕?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我正在嘗試在循環中生成按鈕(每列一個按鈕)。 按鈕創建正確,除了當按鈕執行其腳本時,它將始終執行最後創建的按鈕的腳本 - 而不是創建時傳遞給按鈕框對象的腳本。
所以,按鈕似乎只獲得了對腳本的引用——如果腳本被更改,按鈕將改變其功能。 我嘗試考慮使用腳本數組的解決方法,但問題是我無法為按鈕對像傳遞任何參數(例如索引數組中要執行的腳本)。
問題:在 jsl 中有什麼方法可以在具有不同腳本/行為的循環中創建按鈕? 例如,在創建按鈕對象時,是否有任何方法可以將參數/數據傳遞給按鈕對象???
我的代碼:
NamesDefaultToHere(1);
dt = 當前數據表();
dtCols = dt << Get Column Names( Numeric, Continuous );
// 顯示 strParam 分佈的表達式
Expr_ShowDistribution = Expr(
新窗口(字符(strParam),
分配(
連續分佈(
Column( strParam ) //我們指定我們的參數
),
發送報告(
Dispatch({}, "Distribution", OutlineBox, Set Title( "" ) ),
)
)
)
);
// 主窗口
新窗口("主窗口",
ob = OutlineBox("按鈕",
TextBox("調試按鈕", 設置字體樣式("粗體"))
);
);
// 創建只輸出到日誌的按鈕
BB = Button Box("ClickMe", Show("Clicked"));
ob <<追加(BB);
// 創建用於顯示分佈的按鈕
對於( i = 1, i <= NItems(dtCols), i++,
Expr_ButtonAction = Substitute(NameExpr(Expr_ShowDistribution),
Expr(strParam), Eval(Char(dtCols )));
顯示(NameExpr(Expr_ButtonAction)); // 每個按鈕的表達式都不同。
BB = 按鈕框 ( 字符 (dtCols ), Eval(Expr_ButtonAction));
ob <<追加(BB);
);
Re: 如何在循環中生成按鈕?如果循環中的最後兩行,即您的示例應該有效
BB =按鈕盒(字符( dt列[我]) ,評價( Expr_ButtonAction )) ;
ob <<附加( BB ) ;
被替換為
評價(評估表達式( ob <<附加(按鈕盒(字符( dt列[我] ) ,表達式(名稱表達式( Expr_ButtonAction ) ) ) ) ) ) ;
不是最明顯的解決方案。 在這裡,我認為 PMroz 示例中的“字符串操作”方法更簡單。
Re: 如何在循環中生成按鈕?好主意,但沒有實施。現在我建議使用按鈕的名稱作為關聯數組的鍵。
Re: 如何在循環中生成按鈕?這設置函數()如果我可以將一些用戶數據附加到按鈕,例如通過將鍵值對添加到關聯數組,這種方法似乎更有用。那可能嗎?
Re: 如何在循環中生成按鈕?按鈕腳本可以是帶有引用按鈕的“this”參數的函數,這意味著按鈕可以找到它的名稱或其父框。
新窗口(“示例”,v = V 列錶框());
f = Function({this}, Show(this << getbuttonname));
對於 ( i = 1, i < 10, i++,
v << append( Button Box( "number " || Char( i ), Set Function( f ) ) )
);

“Set Function”參數是完成這項工作的關鍵。在您的示例中,我認為按鈕名稱可能是列名稱。示例中的 VListBox 名為“v”,因此可以將按鈕框附加到它。
Re: 如何在循環中生成按鈕?這是一個有效的實現。我將分佈表達式更改為一個函數,然後不得不使用 evalinsert、parse、eval 來讓它工作。
顯示分佈=功能({列名} , {默認本地} ,
dist_expr =評估插入(
“\[分佈(名義分佈(列(:名稱(“^column_name^”))))]\” ) ;
評估(解析( dist_expr )) ;
) ;
// 主窗口
新窗戶( “主窗口” ,
ob =輪廓框( “鈕扣” ,
文本框( “調試按鈕” ,設置字體樣式( “大膽的” ))
) ;
) ;
// 創建只輸出到日誌的按鈕
BB =按鈕盒( “點擊我” ,展示( “點擊” )) ;
ob <<附加( BB ) ;
dt =打開( “$sample_data\Big Class.jmp” ) ;
dtcols = dt <<獲取列名(細繩) ;
為了(我= 1個,我<=物品( dtcols ) ,我++,
按鈕表達式=評估插入( "\[one_button = 按鈕框("^dtcols ^", showdistribution("^dtcols ^"))]\" ) ;
評估(解析(按鈕表達式)) ;
ob <<附加(一鍵式) ;
) ;