強制用戶提供範圍內的輸入您好,我對 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>