| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 839 人关注过本帖
标题:WEXIST()在WIN7中有问题
取消只看楼主 加入收藏
antony521
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:170
专家分:175
注 册:2009-8-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
WEXIST()在WIN7中有问题
今天做个小程序用了liuxingang28的DoForm函数,WEXIST(W_Name)始终返回F值,窗口可以重复打开.我的使用环境WIN7,VFP9.0 SP2(7423).
是不是WEXIST在WIN7中不好使,你们用怎么样?
帮助中的例子返回值是正确的
DEFINE WINDOW wScreen1 FROM 10,10 TO 20,69
DEFINE WINDOW wScreen2 FROM 1,0 TO 19,79
CLEAR
? WEXIST('wScreen1')  && 显示 .T.
STORE 'wScreen2' TO gcWinName
? WEXIST('win_name')  && 显示 .F.
? WEXIST(gcWinName)  && 显示 .T.
RELEASE WINDOWS wScreen1, wScreen2
定义窗口的方法不一样.

我就是这样调用的doform("dept"),没加其它参数.
* 运行表单--------------------------------------------------------------------------------------------------
FUNCTION DoForm(tcForm,tcVar,tcPara) && tcForm(表单文件名),tcVar(表单变量),tcPara(参数)
    LOCAL W_Name,lErr,i
    = WaitWindow('正在启动程序,请稍候……')
    W_Name = 'frm' + tcForm          && 表单窗口名
    IF !WEXIST(W_Name)               && 窗口不存在时,运行表单
        FOR i = 1 TO 5               && 尝试运行表单 5 次,约 3 秒
            lErr = .f.
            TRY
                IF TYPE('tcVar') = 'C'
                    IF TYPE('tcPara') = 'C'
                        DO FORM (tcForm) NAME (tcVar) LINKED WITH tcPara
                    ELSE
                        DO FORM (tcForm) NAME (tcVar) LINKED
                    ENDIF
                ELSE
                    IF TYPE('tcPara') = 'C'
                        DO FORM (tcForm) WITH tcPara
                    ELSE
                        DO FORM (tcForm)
                    ENDIF
                ENDIF
            CATCH TO oErr WHEN oErr.ErrorNo = 2005
                lErr = .t.          && 因表被其他用户占用,导致无法打开表单时,再重试 4 次
            ENDTRY
            IF !lErr
                EXIT                && 正常打开时,退出
            ENDIF               

            = INKEY(0.5,'H')        && 等待 0.5 秒后,再重试
        NEXT i
        IF lErr
            MESSAGEBOX('数据库中的表正在被其他用户使用,请稍后重试!',16,'提示')
        ENDIF
    ELSE
        ACTIVATE WINDOW (W_Name) TOP    && 窗口存在时,激活窗口
        IF WMINIMUM(W_Name)             && 窗口最小化时,恢复窗口大小
            ZOOM WINDOW (W_Name) NORM
        ENDIF
    ENDIF
    WAIT CLEAR
ENDFUNC

[ 本帖最后由 antony521 于 2015-2-13 16:16 编辑 ]
2015-02-13 16:11
antony521
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:170
专家分:175
注 册:2009-8-20
收藏
得分:0 
回复 2楼 sdta
WEXIST(W_Name) 改为WEXIST("&W_Name")
仍然可以重复打开窗口.

[ 本帖最后由 antony521 于 2015-2-13 16:51 编辑 ]
2015-02-13 16:47
antony521
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:170
专家分:175
注 册:2009-8-20
收藏
得分:0 
回复 4楼 sdta
上传测试文档
DoFormTest.rar (9.68 KB)

WEXIST只能测DEFINE WINDOW定义的窗口,不能测do form的窗口?
liuxingang28的函数都是他测过的,不可能是函数内部的问题。
还是调用的方法有问题。

[ 本帖最后由 antony521 于 2015-2-14 16:21 编辑 ]
2015-02-14 15:39
antony521
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:170
专家分:175
注 册:2009-8-20
收藏
得分:0 
回复 8楼 TonyDeng
版主说的对,我只是在测试别人有意思的一些程序段,用得顺手以后自然会借用一下,在这个过程中学习老师们好的经验.
这不就发现问题了吗?这也是我往往纠结要得到自己使用的错误原因希望能够改正而忽视一些新的建议.当然在我的程序中不会使用自己不明所以的程序段.
不知道我说明白了没有?呵呵~版主说的我明白方法也在用.
回到这个问题
刚刚发现可能是这一句影响Wexist函数的判断结果
W_Name = 'frm' + tcForm  && 表单窗口名
改为
W_Name = tcForm
在一个程序中突然正常了,只能打开一个窗口了.可惜复制到另一程序中却还是不正确,能打开多个窗口,都是同一个过程文件.
2015-02-14 21:25
antony521
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:170
专家分:175
注 册:2009-8-20
收藏
得分:0 
回复 15楼 qingfameng
你说的方法我一般用在主表单(顶层表单)的窗口恢复中,普通表单还是想用VFP自己的命令完成.还是谢谢!
2015-02-15 08:43
快速回复:WEXIST()在WIN7中有问题
数据加载中...
 
   



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

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