海淘直邮:如何避免“不能退出”信息——全视网在线教程频道编程数据栏目

来源:百度文库 编辑:中财网 时间:2024/04/29 08:14:34
如何避免“不能退出”信息

是否曾不断的试着关闭你的应用程序, 而得到的回答是不能退出? 在这里成为故事.

你开发了一个应用程序并将它交会给你的用户. 一切正常. 但是突然你接到一个电话. 用户试着关闭应用程序, 但所得到的信息是: "不能退出Visual FoxPro" . 为什么? 因为应用程序仍然在事件循环中.

在应用程序某一地方, 你可能有类似下面的代码:

DO MainMenu.MPR
READ EVENTS

一但在程序中发布了事件循环( READ EVENTS 命令), 在退出事件循环前,你就不能退出 VFP. 要清除事件循环,发布一条 CLEAR EVENTS 命令. 只要用户想关闭应用程序时(如,从系统菜单中选择了”关闭”或”退出:),你可以正常的执行一条 CLEAR EVENTS.

但是如果用户试着单击窗口标题栏中的关闭按钮时,会发生什么情况呢? 或者用户在应用程序仍然运行着的时候关闭 Windows 又会怎样? 在这些情况下, 应用程序没有机会执行 CLEAR EVENT. 事件循环仍然是活动的, 因此出现了不能退出 VFP 的信息.

要避免这一点, 可使用 ON SHUTDOWN 命令. 该命令的运行方式与 VFP 的其它 "On" 命令(如 ON ERROR)一样, 它指定一个当确定的事件发生时要执行的行动. 在这种情况下, 事件是以任何方式试图关闭应用程序.

因此你所要做的只是执行 ON SHUTDOWN CLEAR EVENTS. 应该在应用程序开始时 – 发布 READ EVENTS 之前. 一但你这样做了, 用户决不会再次见到不能退出信息. 当用户单击窗口标题样中的关闭按钮时, 程序将执行 ON SHUTDOWN 代码, 这将会退出事件循环并将控制返回 READ EVENTS 后面的代码.

什么也没有发生

好了, 还不完全. 现在试着在 VFP 开发环境中运行一个 .APP. 关闭该 .APP. 然后试着退出 Visual FoxPro. 当你用文件菜单中的退出时,没有什么问题, 但在命令窗口打入 QUIT 或单击窗口标题栏的关闭按钮时. 结果是相同的: 什么也没有发生,没有退出 VFP ,没有错误提示.

为什么? 因为 ON SHUTDOWN 命令任然在起作用,因此在关闭 VFP 时,VFP 只是简单地执行一条 CLEAR EVENTS, 这对开发环境没有作用并且也没有程序在运行.

要避免这一点, 返回到应用程序中, 并添加另一个 ON SHUTDOWN 命令. 这一次, 仅仅是不带任何子句的 ON SHUTDOWN. 将它放入清理代码中, 就是说, 在 READ EVENTS 后面的某处. 它的作用是取消原来的 ON SHUTDOWN.

这一对命令 – ON SHUTDOWN CLEAR EVENTS 和 ON SHUTDOWN – 是想雅致地关闭应用程序的最小要求. 但是, 根据应用程序的结构,你可能需要做更多的事.

清理

在我们自己的应用程序中, 文件菜单中的退出菜单项,在发布 CLEAR EVENTS命令前执行某些特定的清除代码. 特别地, 遍历所有已打开表单(通过 _SCREEN 的 Forms 集合), 关闭各个表单. 在这样做的同时, 提示用户处理未保存的修改. 在样做可以让用户决定是否取消关闭应用程序, 以避免因清除事件循环而仍在屏幕上留下一些打开的表单.

无论用户是采用何种方法关闭应用程序,程序需要经过相同的处理过程. 要达到这一点, 我们放入以上处理到一个我们叫做 FileExit 的过程中. 文件菜单的的退出菜单项简单地用 DO FileExit 调用该过程. 在 ON SHUTDOWN 命令中也一样. 换句话说,现在不是 ON SHUTDOWN CLEAR EVENTS, 而是 ON SHUTDOWN DO FileExit. 采用这种方法, 无论用户采用什么方法关闭程序,关闭处理总是相同的.