在 for 循环中创建按钮脚本我正在尝试生成一个表格框,其中包含许多可变的行。 我希望每一行都有按钮,该按钮将对列表中的相应变量执行某些功能。
当前问题:for 循环中的脚本没有像我预期的那样解释 eval expr。 附加到每个复选框的结果脚本应该打印按钮 1、2 或 3 被按下。 相反,它总是说 4。 最终目标是在单击复选框时对 UserText[i] 执行操作。
任何人都可以帮助解释我做错了什么吗? 谢谢你!
奖励问题:我正在使用复选框,因为它们比按钮框小,而且按钮框似乎无法调整大小。 理想情况下,它们只是可点击的小图标。 有没有一种友好的方法来制作一个可点击的小“x”而不是一个完整的按钮?
JMP 版本:16
Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box(
Col Box( "Text", {} ),
Col Box( "Button", {} ),
),
tb << set row borders(1);
);
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>脚本回复:在 for 循环中创建按钮脚本你好,
你们非常亲密。
如果您使用 Eval ( EvalExpr ( ) ) 来包装整个 tb << add row () 语句,如下所示,您将得到您想要的行为:
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
eval(evalexpr(
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>回复:在 for 循环中创建按钮脚本这是我处理这个的老学校方式
Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box(
Col Box( "Text", {} ),
Col Box( "Button", {} ),
),
tb << set row borders(1);
);
//for loop to add a number of rows with a small button next to each one
For( i = 1, i <= N Items( UserText ), i++,
tb << add row(
{Text Box( UserText[i], <<SET width=""></SET>回复:在 for 循环中创建按钮脚本我的方法使用 XPath 和 Contains() 有点复杂,但在某些情况下它可能更健壮(如果更改 XPath,您可以将它扩展到 Checkbox 旁边的其他元素)
Names Default To Here(1);
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window("Select files",
tb = Table Box(Col Box("Text", {}), Col Box("Button", {}), Col Box("Third", {})),
tb << set row borders(1)
);
expr_tablebox_get_checkbox_idx = Expr(
row_idx = Contains((this << parent) << XPath("//CheckBoxBox"), this);
);
expr_tablebox_get_column_idx = Expr(
col_idx = Contains(((this << parent) << parent) << Get Names, (this << parent) << get heading)
);
expr_check_box = Expr(
expr_tablebox_get_checkbox_idx;
expr_tablebox_get_column_idx;
Show(row_idx, col_idx);
);
For Each({txt}, UserText,
tb << Add Row(
{Text Box(txt, << Set Width),
cb = Check Box({""}, << Set Function(function({this},
expr_check_box
))
),
cb = Check Box({""}, << Set Function(function({this},
expr_check_box
))
)
};
);
);
</CODE>使用此方法您可能会遇到一些问题,其中表达式根据您调用它们的位置正确评估,因此它不应该是第一个尝试的方法</P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-601493" slang="en-US" mode="NONE">回复:在 for 循环中创建按钮脚本</LINGO-SUB><LINGO-BODY id="lingo-body-601493" slang="en-US" mode="NONE"><P>我昨晚回来时在想,“这也可以用 Xpath 和包含来完成”。 Jarmo 的帖子已经在这里了;我在下面给出的示例非常相似,但是一旦您构建了表,就会使用 Xpath 语句一次分配所有复选框函数。 这正在成为我处理此类事情的最喜欢的方式之一。</P>
<P> </P>
<PRE><CODE class=" language-jsl">Names Default To Here( 1 );
UserText = {"default 1", "default 2", "default 3"};
win2 = New Window( "Select files",
tb = Table Box( Col Box( "Text", {} ), Col Box( "Button", {} ), << set row borders(1) );
);
//add rows with a small button next to each one
For each ( { txt, i }, UserText,
tb << add row( {Text Box( txt, <<SET width=""></SET>
回复:在 for 循环中创建按钮脚本谢谢你! 我需要花更多时间来理解这个,我没有使用过 set 函数,并且在快速阅读脚本指南和一些示例后我不太了解其行为。 我确实预见到我需要这样的功能的情况,所以我会暂时把它放在脑海中,如果那个时候到来,我会回来。
确认材料中似乎没有明确说明的一些基本内容:定义函数时,“this”是否是 JSL 中的预定义术语,它将指向函数所附加的任何对象? 我看到一些示例在 set 函数参数中使用了“this”,但没有出现在函数定义中的其他任何地方(我有大约 60% 的把握使用了正确的术语)。 基本的数学函数很直观,例如 MyFn = function ({x,y}, x + y ),但是当我们进入对象时,事情似乎会很快变得复杂起来。
回复:在 for 循环中创建按钮脚本它只是与 << Set Function 一起使用时的第一个参数(因为它不必是这,似乎 JMP17 脚本索引正在使用这个盒子例如)。 第一个参数是对设置该函数的特定框的引用。此帮助页面可能会通过一些示例提供更多信息:
脚本指南 > 显示树 > 构建自定义窗口 > 设置函数和设置脚本
此外,对于某些显示框,您可以将多个参数与 << Set Function 一起使用。 你可以在脚本索引中看到这些(如果你能找到它们,有时可能会有点棘手)
