| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5642 人关注过本帖
标题:一个表单上退出按钮的问题
取消只看楼主 加入收藏
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
结帖率:66.67%
收藏
已结贴  问题点数:13 回复次数:6 
一个表单上退出按钮的问题
首先,我有一个“主表单”,我在上面加了一个退出按钮,里面这样写:

Clear events
thisform.release
quit

同时 我的main.prg主程序里有这样一段:

DO form 主表单.scx

Read Events &&开始事件处理:使启动封面停下来
_Screen.Show &&显示VFP主窗口
Read Events &&开始事件处理
RETURN

clea all
close all data

Quit

这里的问题是,我点击“退出”按钮就关闭了主表单,但是vfp的白色大窗口还在那里,无法退出,只能用windows的“结束进程”。。。这个问题出在哪里呢?

~~~~~~~~~~~~~~~~~~~~~~~~
是不是可以理解成我的“退出按钮”没有退出“VFP主窗口”?如果是这样的话,如何通过“退出按钮”完全退出呢?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



补充上传三版源程序,放在任意位置,运行main.prg即可:

我新上传了三版程序,请大家看看,分别是:

1、这一版点按钮变白板无法退出,而点击红叉虽然能退出但是有vfp6进程,只能三个键结束进程。
主表单 的 QueryUnload  里面没有写代码。

2、这一版点按钮变白板,而点击红叉无效
主表单 的 QueryUnload  里面写:
NODEFAULT

3、这一版点按钮变白板,红叉可退出
主表单 的 QueryUnload  里面写:
NODEFAULT

~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的目的是想在这个小例子里

1、搞清楚 QueryUnload 的作用
2、实现“点按钮正常退出,而点击红叉无效”

1这一版点按钮和红叉可退出-但红叉有进程.rar (243.1 KB)


2这一版点按钮变白板-红叉无效.rar (243.07 KB)


3这一版点按钮变白板-红叉可退出.rar (243.11 KB)


[此贴子已经被作者于2016-3-29 20:53编辑过]

搜索更多相关主题的帖子: windows events 主程序 
2016-03-29 18:38
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
收藏
得分:0 
以下是引用tlliqi在2016-3-29 19:05:02的发言:

clear event
quit


谢谢,但是。。。不行,是不是因为我的主表单有几个修改:

ShowWindow  是: 2-作为顶层表单
WindowState  是: 0 -普通
WindowsType 是 : 1 -模式

这么设置的目的是在网上查了很久的“一闪而过”问题的解决方法。。。只有这样设置了。。。



2016-03-29 19:17
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
收藏
得分:0 
我新上传了三版程序,请大家看看,分别是:

1、这一版点按钮变白板无法退出,而点击红叉虽然能退出但是有vfp6进程,只能三个键结束进程。
主表单 的 QueryUnload  里面没有写代码。

2、这一版点按钮变白板,而点击红叉无效
主表单 的 QueryUnload  里面写:
NODEFAULT

3、这一版点按钮变白板,红叉可退出
主表单 的 QueryUnload  里面写:
NODEFAULT


~~~~~~~~~~~~
我的目的是想在这个小例子里:

1、搞清楚 QueryUnload 的作用
2、实现“点按钮正常退出,而点击红叉无效”

[此贴子已经被作者于2016-3-29 20:53编辑过]

2016-03-29 20:41
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
收藏
得分:0 
以下是引用longhair在2016-3-29 20:50:39的发言:

实现“点按钮正常退出,而点击红叉无效”
我一般直接设置关闭按钮无效就能实现了。



那个。。。请问如何“设置关闭按钮无效”?我觉得我用QeuryUnload 是不是不对?
2016-03-29 20:55
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
收藏
得分:0 
以下是引用longhair在2016-3-29 20:42:21的发言:

为了能正常退出,第二个read events必须有地方用clear event清除掉,要不就直接注释掉那两行。


我将主程序改为(把第二个Read Events、RETURN都注释掉):

DO form 主表单.scx

Read Events &&开始事件处理:使启动封面停下来
_Screen.Show &&显示VFP主窗口
**Read Events &&开始事件处理
**RETURN

clea all
close all data

Quit

但是第一个压缩包的程序,还是一点红叉,退出后,后台还是出现VFP6进程。。。。。
2016-03-29 21:04
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
收藏
得分:0 
回复 14楼 longhair
谢谢,我刚才试了一下,好像

主表单 的 QueryUnload  里面把这两个都写上,可以解决红叉退出后,后台还有进程的问题。。。
NODEFAULT


问题是解决了,结贴,但是总感觉还是不太懂 QueryUnload 到底是怎么个意思。

目前我主观理解就是 NODEFAULT 使得红叉无效,然后又自动去执行 按钮2的退出。。。。

但是vfp为啥要设计成这样呢?想不太明白。。。。非要对小红叉这样人工处理一下才保险,否则的话后台总有vfp6的进程,对初学者来说真是费解啊。。。。

[此贴子已经被作者于2016-3-29 21:19编辑过]

2016-03-29 21:11
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
收藏
得分:0 
以下是引用liuxingang28在2016-3-30 08:45:33的发言:

楼主的代码问题不少,看来很多问题并没有搞清楚。小结如下:

1. 对于主表单为模式表单来说(WindowType=1),根本用不到 Read Events语句,只有非模式表单才需要 Read Events
2. 顶层表单(ShowWindow=2)会忽略表单的 WindowType 设置,也就是说:顶层表单都是非模式的。
3. 主程序中为什么要加两个 Read Events?第二个 Read Events 应该删去
4. QueryUnload 只有在单击表单右上角的“关闭”按钮才会发生,而执行代码 THISFORM.Release 或 Release THISFORM 不会发生QueryUnload
5. 若想在关闭窗口时统一执行特定的操作,有多种方法。
   可以在表单上新建一个退出按钮,并禁用表单的关闭按钮(form.Closable=.f.)。
   还可以不禁用关闭按钮,而在form.QueryUnload事件中输入:
   Nodefault
   THIS.cmdExit.Click
   还可以将退出时要统一执行的代码放在 Form.Destroy事件中。不管是 THISFORM.Release 还是单击窗口的关闭按钮,最后都会调用 Form.Destroy



谢谢,解答太全面了。只是对 模式表单WindowType 这块始终不太明白
2016-03-30 17:27
快速回复:一个表单上退出按钮的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018756 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved