强制用户提供范围内的输入您好,我对 JMP 相当陌生,我不知道如何编写一个抛出错误的脚本来防止用户输入无效数字。 我希望用户输入一个数字,该数字最终保存到变量中,但如果该数字超出 1-4 范围,则重新提示输入。
这是我到目前为止没有进行任何错误检查的情况:
Names Default To Here (1);
num = 0;
w = New Window( "Prompt",
<<MODAL></MODAL>
任何有关实现此目标的帮助或建议将不胜感激!
质量和工艺工程回复:强制用户提供范围内的输入只需在函数调用后添加一个关闭窗口即可。
b1 = button box("First Program",
program1();
nw << close window();
),
回复:强制用户提供范围内的输入效果非常好! 再次感谢!
回复:强制用户提供范围内的输入如果在新窗口之后有其他代码,您可以使用 << modal 将新窗口更改为模态窗口(可能需要一些其他小的更改)。 如果使用 <
nw = new window("Test Options", << modal,
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
program1();
okBtn << Click();
),
b2 = button box("Second Program",
program2();
okBtn << Click();
),
b3 = button box("Third Program",
program3();
okBtn << Click();
),
b4 = button box("Fourth Program",
program4();
okBtn << Click();
),
),
),
h list box(okbtn = Button Box("OK"), cancelBtn=ButtonBox("Cancel"))
);
Show("shouldnt execute before window is closed");回复:强制用户提供范围内的输入重新编辑:实际上,似乎在新窗口中执行按钮之后出现的任何代码都在由于某种原因链接到按钮的程序之前运行。 有谁知道为什么会发生这种情况?
回复:强制用户提供范围内的输入那太棒了! 我认为这对我的目的很有用,谢谢分享! 最后,这不是一个非常重要的功能,但是您知道是否有一种方法可以按下执行程序的按钮,然后窗口自动关闭,而无需用户按“退出”?
回复:强制用户提供范围内的输入如果您引用所有用户都可以访问的文件共享上的文件,它将起作用。
您还可以将要在主 JSL 代码本身中运行的程序作为单独的函数包含在内。这是一个例子:
// First program
program1 = function({},
show("Running program1");
// JSL code for first program
);
// Second program
program2 = function({},
show("Running program2");
// JSL code for second program
);
// Third program
program3 = function({},
show("Running program3");
// JSL code for third program
);
// Fourth program
program4 = function({},
show("Running program4");
// JSL code for fourth program
);
nw = new window("Test Options",
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
program1();
),
b2 = button box("Second Program",
program2();
),
b3 = button box("Third Program",
program3();
),
b4 = button box("Fourth Program",
program4();
),
),
),
bexit = button box("Exit",
nw << close window();
),
);
有关函数的更多信息,请参阅 JSL 文档。
回复:强制用户提供范围内的输入你好! 这是解决问题的好方法。 但我想知道,我是否能够共享所有程序脚本,以便任何拥有代码的人都可以运行链接到按钮的相同程序? 或者,如果文件目录路径对于下载 .jsl 脚本的任何人来说都是唯一的,那是否不可能?
回复:强制用户提供范围内的输入如果您想根据用户选择的内容(1-4)运行不同的程序,我会使用按钮。它看起来是这样的:

这是代码。请注意,我使用面板框来包围按钮,并使用排列框来对齐按钮框的两侧。要运行的程序存储在c:\myfiles 中,名称为program1.jsl、program2.jsl 等。根据您的情况更改文件夹和JSL 程序名称。
nw = new window("Test Options",
panel box("Click the button to run the desired program",
lineup box(ncol(1),
b1 = button box("First Program",
include("c:\myfiles\program1.jsl");
nw << close window();
),
b2 = button box("Second Program",
include("c:\myfiles\program2.jsl");
nw << close window();
),
b3 = button box("Third Program",
include("c:\myfiles\program3.jsl");
nw << close window();
),
b4 = button box("Fourth Program",
include("c:\myfiles\program4.jsl");
nw << close window();
),
),
),
bexit = button box("Exit",
nw << close window();
),
);回复:强制用户提供范围内的输入再次非常感谢,超级有帮助!
回复:强制用户提供范围内的输入应该是一样的,但看起来确实有点奇怪。 使用脚本索引中的模态示例:
这部分基本上是 if 的条件 1:
ex = New Window("Dialog() example",
<<MODAL></MODAL>这就是结果1
ex["variable"]
并返回Else:
"CANCEL"
因为这些结果和基本上将根据 if 条件结果执行的最后一行,它们将被打印到日志中。 您可以通过以下两个简短脚本对此进行测试:
a = 1; //will print 1 to Log as this is the only and last row in script
a = 1;
Write(); //will print this as it is the last row of code
如果您确实想了解 ex 变量的工作原理,则可以通过运行脚本索引中的示例并在最后添加 Show(ex) 来相当轻松地检查它。
下面是一个示例,其中通过添加括号和注释使 if 语句更加清晰,我还为 ex 变量添加了 Show() :
Names Default To Here(1);
If(
( //condition1 starts
ex = New Window("Dialog() example",
<<MODAL></MODAL>(请注意,由于 Show() “CANCEL” 不是按下取消时的最后一行代码,因此不会打印它,这也会向您显示即使按下取消,变量值也会更新)
希望我正确地解释了一切。 您可以从 JMP 帮助和脚本指南中找到更多信息:构建模态窗口
回复:强制用户提供范围内的输入那很完美! 太感谢了! :^)
为了学习目的,代码结尾是什么意思? 我通常知道它的 If(条件 1, 结果 1, 条件 2, 结果 2, ..... resultElse);但我对此不熟悉:
ex["button"] == 1;
,
ex["variable"],
"CANCEL
回复:强制用户提供范围内的输入我认为你可以使用 << On Validate() 来实现这一点。
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>
编辑:
或者您的意思是使按钮变灰/禁用?
Names Default To Here(1);
If(
ex = New Window("Dialog() example",
<<MODAL></MODAL>回复:强制用户提供范围内的输入这是个好主意! 不幸的是,如果用户不小心输入了 6,但实际上想输入 3,那么他们的输入将被自动选择为 4。 抱歉,如果问题有点复杂。
回复:强制用户提供范围内的输入有没有办法阻止用户按下“确定”按钮并退出窗口,除非该值是 1-4? 我认为,用户可以退出窗口,输入将设置为 0。
回复:强制用户提供范围内的输入之前没有看到过(或者已经忘记了)。 使用 << 设置最小值和 << 设置最大值:
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL></MODAL>
回复:强制用户提供范围内的输入使用Radio Box来实现这样不是更简单吗?
Names Default To Here(1);
New Window("Example", rb = Radio Box({"True", "False", "None of the above"}, Print("Selection Changed")));回复:强制用户提供范围内的输入您好,非常感谢您的回复! 我想让用户被迫选择范围内的数字,而不是让代码根据用户的错误进行调整。 例如,我认为每个数字都将与将要运行的一段代码相关联。
Names Default To Here (1);<BR />num = 0;<BR />w = New Window( "Prompt",
<<MODAL></MODAL>
然后,我将编写一个 if 语句,其中如果输入 == 1,则运行此代码,如果输入 == 2,则运行另一段代码,依此类推。 因此,对于我的情况,如果超出范围,我不希望数字自动更正为 1 或 4。 抱歉,如果这令人困惑!
回复:强制用户提供范围内的输入您可以使用数字编辑框并设置输入的下限和上限,甚至声明边界是否有效。 您不需要编写表达式或函数来检查。 它已经内置在这个展示盒中。
回复:强制用户提供范围内的输入以下是对代码的修改,可处理仅允许值 1-4 的要求
Names Default To Here( 1 );
num = 0;
input = 0;
w = New Window( "Prompt",
<<MODAL> 4 | str1 << get < 1,
str1 << set( 0 )
)
)
)
),
H List Box( Button Box( "Cancel" ), Button Box( "OK" ) )
),
);
If( w["button"] == 1,
input = w["str1"]
);
Show( input );</MODAL>回复:强制用户提供范围内的输入您可以以某种方式使用 set 函数。
下面是一个示例,如果用户尝试输入低于 1 的值,则该值设置为 1;如果用户输入高于 4,则该值设置为 4
Names Default To Here (1);
num = 1;
w = New Window( "Prompt",
<<MODAL> 4, this << set(4)
);
))
)
),
);
input = w["str1"];
show(input);</MODAL>