标题:关于判断表单是否运行的问题
只看楼主
雨花石568
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-2-22
结帖率:100%
已结贴  问题点数:20 回复次数:14 
关于判断表单是否运行的问题
有两个表单:表单1、表单2。表单1中有command1、command2。
command1代码如下:
USE qj.dbf
DO FORM 表单2.scx
command2代码如下:
USE xj.dbf
DO FORM 表单2.scx
想要实现功能:点击command1时,首先检测表单2是否运行,如果运行了就提示“请先关闭表单2”,如果没有表单2没有运行,就直接打开表单2。点击command2同理。
测试文件如下
新建文件夹.zip (5.92 KB)


[此贴子已经被作者于2023-1-14 17:29编辑过]

搜索更多相关主题的帖子: 表单 判断 是否 FORM 运行 
2023-01-14 17:27
kangss
Rank: 4
等 级:贵宾
威 望:10
帖 子:138
专家分:237
注 册:2014-6-12
得分:4 
回复 楼主 雨花石568
WEXIST( ) 函数
请参阅 示例
 全部折叠 全部展开
检测所指定的用户自定义窗口是否存在。

 
WEXIST(WindowName)
 

参数
WindowName

指定用户自定义窗口的名称。也可以指定 Visual FoxPro 系统窗口的名称(如“命令”窗口、“数据工作期”窗口、“浏览”窗口等),在 Visual FoxPro 中,还可以指定工具栏的名称。如果所指定的系统窗口或工具栏可见或隐藏,则 WEXIST( ) 函数返回“真”(.T.)。如果所指定的系统窗口或工具栏已关闭,则返回“假”(.F.)。“命令”窗口和“调试”窗口是两个例外。在 WEXIST( ) 中包含“命令”窗口 的名称时,总是返回“真”(.T.)。如果曾经打开过“调试”窗口,即使被关闭,WEXIST( ) 函数仍返回“真”(.T.)。
2023-01-14 17:29
雨花石568
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-2-22
得分:0 
回复 2楼 kangss
请问command1代码如何更改?
2023-01-14 17:30
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:4 
方法有很多种,我提供一种给你参考。

form2 的init里加以下代码:
public Oform
oform=this
form2 的destroy里加以下代码:
oform=null
Release oform

form1的command1里代码如下:
IF VARTYPE(oform)="U" OR ISNULL(oform)
    do form form2
esle
    MESSAGEBOX("请先关闭form2!")
ENDIF
2023-01-14 18:12
雨花石568
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-2-22
得分:0 
回复 4楼 sam_jiang
此方法可行。
如果用wexist()函数,怎么编写代码呢?
2023-01-14 20:05
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
回复 5楼 雨花石568
很少用wexist()函数,好像不能通过form.name获得form窗体。
可以用Api函数FindWindow来查找是否有窗口form2
DECLARE integer FindWindow IN WIN32API string,string
nhwnd=findwindow(null,"yourformcaption")
if nhwnd =0
    do form form2
else
    MESSAGEBOX("请先关闭form2!")
endif

findwindow函数的例子

DECLARE integer FindWindow IN WIN32API string,string
a=findwindow(null,_vfp.Caption)
?a
?_vfp.hWnd
a=findwindow(null,"Command")
?a
a=findwindow(null,"命令")
?a
2023-01-14 21:20
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:4 
if vartype(变量2)='O'
    MESSAGEBOX("请先关闭form2!")
else
    DO FORM 表单2.scx name 变量2 linked
endif

2023-01-14 21:20
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
回复 7楼 laowan001
又学到一种方法。。。
2023-01-14 21:35
pvm2000
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:24
帖 子:159
专家分:256
注 册:2022-12-22
得分:4 
以下是引用laowan001在2023-1-14 21:20:16的发言:

if vartype(变量2)='O'
    MESSAGEBOX("请先关闭form2!")
else
    DO FORM 表单2.scx name 变量2 linked
endif


这种操作,有时间试试。
2023-01-15 06:05
雨花石568
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-2-22
得分:0 
回复 7楼 laowan001
我测试了一下,这个代码不行。
根据你的思路,我调整为如下代码,可行:
IF VARTYPE(asd)='O'
    MESSAGEBOX('请先关闭“查看”窗口')
ELSE
    PUBLIC asd   &&创建全局变量asd
    USE qj.dbf
    DO FORM 表单2.scx NAME asd linked
ENDIF
原因不知道

表单2的destroy中加上  release asd  可以达到效果,不加也可以达到效果。
原因也不知道


感谢提供新思路。
2023-01-15 21:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511112-1-1.html




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

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