有没有办法让按钮盒“知道”它在容器盒中的位置?你好。 我想知道是否有一种方便的方法让按钮框以某种方式知道它在阵容框中的位置。 我的具体情况:
JMP 专业版 16.2.0
我有一个脚本可以创建一个带有 LineUp 框的窗口。 在每个单元格中,都有一个按钮框,我想根据按钮出现的列来执行不同的操作。 例如:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i],
//Insert code for the button to somehow identify which button it is within lub.
Speak(list2[i])
);
lub << Append(tb);
lub << Append(bb);
);
New Window("Test", lub);如果我按原样运行脚本,我会得到:

但是当我单击任何按钮时,我收到错误:
“访问或评估 'list2[ /*###*/i]' 、 list2[/*###*/I] 时的下标范围”
我理解这个错误,因为按钮框在执行时无法调用“i”的值。 我的问题:是否有一种方法可以让按钮框在按下时“自我识别”它在排队框中的位置,并使用该值作为按钮脚本中的 list2 索引?
我当前正在使用 JSL Quotes 和 Substitute 命令来创建按钮。 在这种情况下,我将 For 循环的内容编写为 JSL Quote 并替换为 i 的值,然后替换为 Eval(Parse())。 但这很笨重,我想知道是否有更好的方法,例如“bb << Get Location”或“bb << Count Siblings”命令。 这些命令当然不存在,但也许还有另一种技术?
谢谢!
自动化和脚本编写消费者和市场研究回复:有没有办法让按钮盒“知道”它在容器盒中的位置?谢谢! 这是一个更加优雅的解决方案。
回复:有没有办法让按钮盒“知道”它在容器盒中的位置?作为对OP最初问题的回答,答案是肯定的,而且相当简单。这是一个例子:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i], <<SET function=""></SET>回复:有没有办法让按钮盒“知道”它在容器盒中的位置?嗨,贾莫。 Eval Insert/Eval Expr/Parse 组合与我当前使用的 JSLQuote/Substitute/Parse 组合类似。 但您提供的其他解决方案正是我正在寻找的东西。 谢谢!
回复:有没有办法让按钮盒“知道”它在容器盒中的位置?我不知道获取位置的任何直接方法,但您可以计算“位置”,或者您可以将知识插入按钮使用 Eval Insert、Eval Expr、Parse 和 Substitute 将一个表达式插入另一个表达式。 您还可以使用 << get 按钮名称来获取按钮的文本;或 << prev sib 以及正确的引用以获取文本框中的文本;您可以“隐藏”按钮(或索引)的工具提示中的文本...并且还有更多选项,具体取决于您想要做什么以及如何做。
查看更多...