| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6895 人关注过本帖, 1 人收藏
标题:VFP表单右上角关闭按钮无法退出系统
只看楼主 加入收藏
parden
Rank: 2
等 级:论坛游民
帖 子:29
专家分:36
注 册:2011-9-21
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:8 
VFP表单右上角关闭按钮无法退出系统
   我在此论坛也搜索了一些答案。但是不能很好地解决我的问题。
   我的问题是:我有两个表单。第一个是登陆窗口,第二个是主窗口。通过登陆窗口,输入密码,成功就进入主表单,同时登陆表单自行关闭。我点击登陆窗口的退出(自己添加的按钮,其代码如下: clear event;release thisform)按钮,在任务管理器中没有相关的进程。通过登陆进入主窗口,点击退出按钮也能够退出。
   但是有时候,存在一种情况,那就是,我打开到登陆窗口,(出于某种原因,并没有继续登陆)我直接点击表单右上角“×”按钮,却不能完全退出,即在任务管理器中还有进程。为难的是,我不能在登陆表单上的destroy事件或QUERYUNLOAD事件或UNload事件添加CLEAR ENENT;release thisform。我试验过,如果添加的话,当我想通过密码验证后进入主窗口,原登陆窗口发生上述事件(destroy事件或QUERYUNLOAD事件或UNload事件),导致不能进入主窗口。请高人指点迷津。
搜索更多相关主题的帖子: 输入密码 成功 任务管理器 release event 
2011-09-29 17:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
逻辑不对。
clear events语句,应写在destroy事件中(不用再写release了),在你自己的结束按钮中,写release thisform就可以。

授人以渔,不授人以鱼。
2011-09-29 17:24
parden
Rank: 2
等 级:论坛游民
帖 子:29
专家分:36
注 册:2011-9-21
收藏
得分:0 
回复 2楼 TonyDeng
我试了,对于点击“×”关闭登陆窗口是有效的,但是由登陆窗口进入到主窗口我猜想还要添加一条语句:read enevts。现在下班了,回家继续调试。
2011-09-29 18:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
read events是在show登陆窗口之后设置的,在调用过程处,不在窗体内部。

授人以渔,不授人以鱼。
2011-09-29 18:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
程序运行一般方法:DO FORM之后是READ EVENTS,在FORM关闭释放时CLEAR EVENTS,程序在READ EVENTS后接着运行,启动主表单,再READ EVENTS一次,如此重复。

Form窗体的行为,一旦遇到被release,就触发destroy事件,这是唯一的出口,在这里CLEAR EVENTS,就能保证无论用任何方式release表单,均能执行CLEAR EVENTS。鼠标点击右上角叉叉按钮的动作,其实就是release thisform,此指令一出,马上触发destroy事件,与你自设按钮执行release thisform是相同的行为。

授人以渔,不授人以鱼。
2011-09-29 22:38
parden
Rank: 2
等 级:论坛游民
帖 子:29
专家分:36
注 册:2011-9-21
收藏
得分:0 
回复 5楼 TonyDeng
我按照你的意思,在登陆窗口添加CLEAR EVENTS 后,窗口自带的关闭按钮能够退出程序。但是通过密码验证后,进入主表单就不行了,程序就直接执行完毕了。以下代码是我的登陆代码。注:乱码的原因是复制产生的。这点你能够理解的。

private yhm,mm
yhm=alltrim()
mm=alltrim(thisform.T2.value)
use d:\program\vfp98\zjk\mima
go top
locat for yhm==alltrim(mima.̞)
if found() and mm==alltrim(mima.ÃÜÂë)
   do form d:\program\vfp98\zjk\main
   use
   release thisform                                         
else
   messagebox("ÇëÖØÐÂÊäÈëÃÜÂ룡",0+0+0,"Ìáʾ")
   thisform.T2.value=""
   thisform.T2.setfocus
endif
   昨天晚上尝试了多次,不行。但是我有个思路。那就是在登陆窗口添加一个参数。其直为0或1.如果点击了登陆按钮,那么就为1。在登陆窗口的queryunload事件中添加一句:
*dengluchongkou.init() 定义一个参数
public n
n=0
dengluchongkou.dengluanniu.click()  n先为1,执行release,会触发queryunload事件,不执行clear event。
                                    同时最后必须将n置为0,否则,点击“×”还会执行clear event。
n=1
其他代码                         &&这里是程序的其他代码,包含do form otherformnanme。
thisform.release
n=0

*dengluchongkou.queryunload()
if n=0
clear event
release thisform
else
release thisform
endif
这样,当密码正确的时候,执行到①处的时候,会做一个判断,就不执行 clear event。继续登陆主窗口。如果直接点击右上角的关闭按钮,就执行n=0后的代码。
试验了一下,貌似可以完全退出。希望这能够对VPF New Learner有帮助。

[ 本帖最后由 parden 于 2011-9-30 10:25 编辑 ]
2011-09-30 10:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你从.scx启动程序?那我无话可说了。

授人以渔,不授人以鱼。
2011-09-30 10:24
parden
Rank: 2
等 级:论坛游民
帖 子:29
专家分:36
注 册:2011-9-21
收藏
得分:0 
回复 7楼 TonyDeng
我有主程序 main.prg的,先进入欢迎界面,然后自动进入登陆窗口,密码验证后,再调出main.scr。我是按照一般软件登陆思维设计的。

[ 本帖最后由 parden 于 2011-9-30 10:29 编辑 ]
2011-09-30 10:28
GUNTER
Rank: 1
等 级:新手上路
帖 子:12
专家分:9
注 册:2011-10-6
收藏
得分:0 
主程序:
DO FORM XXXX.SCX
READ EVENT

主表单UNLOAD()
RELEASE ALL
QUIT
2011-10-06 18:45
快速回复:VFP表单右上角关闭按钮无法退出系统
数据加载中...
 
   



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

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