|
如何避免“不能退出”信息
是否曾不斷的試著關(guān)閉你的應(yīng)用程序, 而得到的回答是不能退出? 在這里成為故事. 你開發(fā)了一個應(yīng)用程序并將它交會給你的用戶. 一切正常. 但是突然你接到一個電話. 用戶試著關(guān)閉應(yīng)用程序, 但所得到的信息是: "不能退出Visual FoxPro" . 為什么? 因為應(yīng)用程序仍然在事件循環(huán)中. 在應(yīng)用程序某一地方, 你可能有類似下面的代碼: DO MainMenu.MPR READ EVENTS 一但在程序中發(fā)布了事件循環(huán)( READ EVENTS 命令), 在退出事件循環(huán)前,你就不能退出 VFP. 要清除事件循環(huán),發(fā)布一條 CLEAR EVENTS 命令. 只要用戶想關(guān)閉應(yīng)用程序時(如,從系統(tǒng)菜單中選擇了”關(guān)閉”或”退出:),你可以正常的執(zhí)行一條 CLEAR EVENTS. 但是如果用戶試著單擊窗口標(biāo)題欄中的關(guān)閉按鈕時,會發(fā)生什么情況呢? 或者用戶在應(yīng)用程序仍然運行著的時候關(guān)閉 Windows 又會怎樣? 在這些情況下, 應(yīng)用程序沒有機會執(zhí)行 CLEAR EVENT. 事件循環(huán)仍然是活動的, 因此出現(xiàn)了不能退出 VFP 的信息. 要避免這一點, 可使用 ON SHUTDOWN 命令. 該命令的運行方式與 VFP 的其它 "On" 命令(如 ON ERROR)一樣, 它指定一個當(dāng)確定的事件發(fā)生時要執(zhí)行的行動. 在這種情況下, 事件是以任何方式試圖關(guān)閉應(yīng)用程序. 因此你所要做的只是執(zhí)行 ON SHUTDOWN CLEAR EVENTS. 應(yīng)該在應(yīng)用程序開始時 – 發(fā)布 READ EVENTS 之前. 一但你這樣做了, 用戶決不會再次見到不能退出信息. 當(dāng)用戶單擊窗口標(biāo)題樣中的關(guān)閉按鈕時, 程序?qū)?zhí)行 ON SHUTDOWN 代碼, 這將會退出事件循環(huán)并將控制返回 READ EVENTS 后面的代碼. 什么也沒有發(fā)生 好了, 還不完全. 現(xiàn)在試著在 VFP 開發(fā)環(huán)境中運行一個 .APP. 關(guān)閉該 .APP. 然后試著退出 Visual FoxPro. 當(dāng)你用文件菜單中的退出時,沒有什么問題, 但在命令窗口打入 QUIT 或單擊窗口標(biāo)題欄的關(guān)閉按鈕時. 結(jié)果是相同的: 什么也沒有發(fā)生,沒有退出 VFP ,沒有錯誤提示. 為什么? 因為 ON SHUTDOWN 命令任然在起作用,因此在關(guān)閉 VFP 時,VFP 只是簡單地執(zhí)行一條 CLEAR EVENTS, 這對開發(fā)環(huán)境沒有作用并且也沒有程序在運行. 要避免這一點, 返回到應(yīng)用程序中, 并添加另一個 ON SHUTDOWN 命令. 這一次, 僅僅是不帶任何子句的 ON SHUTDOWN. 將它放入清理代碼中, 就是說, 在 READ EVENTS 后面的某處. 它的作用是取消原來的 ON SHUTDOWN. 這一對命令 – ON SHUTDOWN CLEAR EVENTS 和 ON SHUTDOWN – 是想雅致地關(guān)閉應(yīng)用程序的最小要求. 但是, 根據(jù)應(yīng)用程序的結(jié)構(gòu),你可能需要做更多的事. 清理 在我們自己的應(yīng)用程序中, 文件菜單中的退出菜單項,在發(fā)布 CLEAR EVENTS命令前執(zhí)行某些特定的清除代碼. 特別地, 遍歷所有已打開表單(通過 _SCREEN 的 Forms 集合), 關(guān)閉各個表單. 在這樣做的同時, 提示用戶處理未保存的修改. 在樣做可以讓用戶決定是否取消關(guān)閉應(yīng)用程序, 以避免因清除事件循環(huán)而仍在屏幕上留下一些打開的表單. 無論用戶是采用何種方法關(guān)閉應(yīng)用程序,程序需要經(jīng)過相同的處理過程. 要達到這一點, 我們放入以上處理到一個我們叫做 FileExit 的過程中. 文件菜單的的退出菜單項簡單地用 DO FileExit 調(diào)用該過程. 在 ON SHUTDOWN 命令中也一樣. 換句話說,現(xiàn)在不是 ON SHUTDOWN CLEAR EVENTS, 而是 ON SHUTDOWN DO FileExit. 采用這種方法, 無論用戶采用什么方法關(guān)閉程序,關(guān)閉處理總是相同的. |
|
|