對話
對話是兩個人之間的對話。 兩個人的對話通常是這樣的:
這兩個人交換信息的方式使他們能夠在談話過程中處理其他事情。
有時兩個人會切換到一種高度集中的對話模式:
在這種模式下,副駕駛現在忽略紙牌遊戲,而飛行員則忽略三明治。
對話框是人與計算機進行對話的窗口。 JMP 有兩種對話框:無模式對話框和模態對話框。 查找/替換對話框是無模式的;它保持打開狀態,並在窗口之間切換焦點,就像飛行員從經濟切換到食物一樣輕鬆。 JMP 的保存對話框是模態的;一旦 JMP 進入保存文件模式,在保存文件或取消保存之前,沒有任何其他內容可以妨礙。 JSL 可以創建自定義對話框(無模式或模式),為您提供一些信息並獲得答复。
得到答案
模式對話框的生命週期:
第 1 項,構建樹,通常作為 New Window 函數的參數來完成。 第 2 項和第 3 項是新窗口功能。 這是一個警報框模式對話框。
rdata = New Window( title, <<MODAL></MODAL>
<
Just thought you should know...Just thought you should know...Just thought you should know...Just thought you should know...只是覺得你應該知道...
這個小窗口的雙向對話框非常簡單:
沒有數據可返回。 New Window 函數確實返回一個值;它告訴您是否按下了“確定”按鈕
{Button( 1 )}
或使用操作系統提供的關閉按鈕關閉窗口
{Button( -1 )}
它返回一個包含一個元素的列表。 您可以使用以下命令測試“取消”與“確定” rdata[“按鈕”]這將是 -1 或 1。 您可能不在乎,因為您沒有在對話框中放置“取消”按鈕。
很久以前,JMP 將窗口的內容(顯示框)放入一個稱為垃圾在要求操作系統關閉窗口之前。垃圾隨著時間的推移,它解決了許多問題,但有時會產生意想不到的副作用。 一個副作用是使模式對話框的顯示框可用於 JSL短的對話框關閉後的時間,這就是一些用戶從模式對話框中檢索答案的方式......實際上是將它們從垃圾箱中取出。
問題與垃圾圍繞它填充了多少以及何時清空它。 在 JMP 的早期版本中,當顯示下一個窗口或某些變體時,垃圾箱會被清空。 當垃圾箱被清空時,它的內容就消失了,那些模式對話框變量也消失了。 它在大多數時候都有效,但它不斷發展,試圖解決各種問題。 最終@hecht_jmp將最先進的解決方案放入 JMP 中,解決了垃圾問題……但需要更多的計劃來從模式對話框中獲取答案。
以正確的方式獲得答案
如果您想要返回更多數據,您必須通過以下方式請求<<返回結果:
rdata = New Window( "modal dialog test", <<MODAL></MODAL>
It said "Enter your name" before I typed over it.It said "Enter your name" before I typed over it.It said "Enter your name" before I typed over it.It said "Enter your name" before I typed over it.在我輸入之前,它說“輸入你的名字”。
{answer = "Craige", 按鈕( 1 )}
您可以使用rdata[“答案”]之後新窗戶()返回以從變量中的文本框中獲取值回答。 (首先進行取消測試。)
列表類似於關聯數組嗎?
上面的所有示例都返回一個列表。 列表中的項目看起來都像簡單的賦值語句或某種函數調用。 JMP 的一個很少使用且不太了解的功能是使用這些名稱而不是更常見的數字索引來為列表添加下標。
result = New Window( "Tell us about yourself", <<MODAL></MODAL>
Bob is about to press OKBob is about to press OKBob is about to press OKBob is about to press OK鮑勃正要按“確定”
結果的值可能是
{名稱=“鮑勃”,標題=“程序員”,按鈕(1)}
或者,如果鮑勃取消,
{名稱=“鮑勃”,標題=“程序員”,按鈕(-1)}
If( result["Button"] == 1, Write( Eval Insert( "\!n\[^result["name"]^ is a ^result["title"]^]\" ) ) , // else Write( "\!nthe dialog canceled." ) );
鮑勃是一名程序員
列表做其行為有點像關聯數組,儘管它是通過順序查找完成的。 (如果您需要關聯數組,請創建一個。 不要使用此列表行為...它是一個糟糕的替代品。)
模態對話框語義
當用戶按下模式對話框上的取消按鈕時,他們希望不會發生任何更改。 模式對話框中的任何 JSL 都應該操作該對話框,而無需更改程序其餘部分中的變量。 這是一個更大的例子;它有一個用於啟動報告的無模式對話框:
You can work in other windows while this window is open; it is a modeless dialog.You can work in other windows while this window is open; it is a modeless dialog.You can work in other windows while this window is open; it is a modeless dialog.You can work in other windows while this window is open; it is a modeless dialog.當此窗口打開時,您可以在其他窗口中工作;這是一個非模式對話框。
每次按下“生成報告”按鈕時,都會打開另一個窗口:
A report showing the values from the modeless launcher.A report showing the values from the modeless launcher.A report showing the values from the modeless launcher.A report showing the values from the modeless launcher.顯示來自無模式啟動器的值的報告。
還有一個“設置參數”按鈕,可打開帶有驗證例程的模式對話框。 此取消按鈕不會對上面的啟動器應用任何更改。
The validation routine opens yet another modal dialog.The validation routine opens yet another modal dialog.The validation routine opens yet another modal dialog.The validation routine opens yet another modal dialog.驗證例程會打開另一個模式對話框。
// here's a simple modal window. It provides a warning, but no data is returned. alert = Function( {title, text, icon = "error"}, New Window( title, <<MODAL></MODAL>
什麼是模式對話框以及如何編寫更好的對話框。