如何在循环中生成按钮?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我正在尝试在循环中生成按钮(每列一个按钮)。 按钮创建正确,除了当按钮执行其脚本时,它将始终执行最后创建的按钮的脚本 - 而不是创建时传递给按钮框对象的脚本。
所以,按钮似乎只获得了对脚本的引用——如果脚本被更改,按钮将改变其功能。 我尝试考虑使用脚本数组的解决方法,但问题是我无法为按钮对象传递任何参数(例如索引数组中要执行的脚本)。
问题:在 jsl 中有什么方法可以在具有不同脚本/行为的循环中创建按钮? 例如,在创建按钮对象时,是否有任何方法可以将参数/数据传递给按钮对象???
我的代码:
NamesDefaultToHere(1);
dt = 当前数据表();
dtCols = dt << 获取列名(数字,连续);
// 显示 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 <<附加(一键式) ;
) ;