Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

判断窗体是否打开的代码含意

白发学者  发表于:2009-08-07 17:49:54  
复制

谁能解说一下下面代码的含意及用法。

 

http://www.accessoft.com/article-show.asp?id=869

 

判断窗体是否打开的两种方法


Function IsLoaded(strName As String, Optional intObjectType As Integer =
acForm)
IsLoaded = (SysCmd(acSysCmdGetObjectState, intObjectType, strName) <> 0)
End Function

函数二
Function IsFormLoaded(strFrmName As String) As Boolean

Const conFormDesign = 0
Dim intX As Integer

IsFormLoaded= False
For intX = 0 To Forms.Count - 1
If Forms(intX).FormName = strFrmName Then
If Forms(intX).CurrentView <> conFormDesign Then
IsFormLoaded= True
Exit Function ' Quit function once form has been found.
End If
End If
Next

 

Top
白发学者 发表于:2009-08-09 13:35:44

顶一下

 

两天了,怎么没人帮忙

 



trynew 发表于:2009-08-10 11:14:38

我到现在都弄不明白电视机是怎么收到电视节目的,但我天天都看电视!



trynew 发表于:2009-08-10 11:19:55

你只要把函数复制到你的一个通用模块中,在需要的地方使用函数来判断某个名称的窗体是否打开:

if isloaded("登陆")=false then msgbox "请先登陆!"



白发学者 发表于:2009-08-10 19:32:22

trynew 你好先谢谢,第一人对此问题的回复:

 

可你想想天天上此论坛的人是为了“看电视”,还是为了将黑白电视-->彩色电视-->大屏幕-->液晶电视-->.......

 

大家如果只是将旧的黑白电视配件拆下再重组你说能得到现在电视吗?

 

(晚辈无礼了)

 

 

 



白发学者 发表于:2009-08-14 08:44:09
 

trynew 发表于:2009-08-14 11:33:24

楼主精神可嘉,他日定可成才:)

其实你略懂英文的话,各条语句大概都可猜出个一二三四来,这里唯一的难点就是知道Forms集合是什么:

函数一就是调用了一个系统命名函数:syscmd(SystemCommand)中的获取对象状态(acSysCmdGetObjectState),判断窗口对象的中台不是关闭(0)那就是打开了。

函数二就是用一个循环,在打开窗体集合(Forms集合)中逐个判断名称是否等于要检测的名称,如果有大然就是打开了。

If Forms(intX).CurrentView <> conFormDesign Then 则是判断窗体的当前视图(CurrentView)是否为窗体设计,(设计视图其实也是打开状态,加上这一句,就是判断窗体是否打开运行,在函数一中只是判断窗体是否打开,如果要监测其是否运行则也要加上这一句。)

除了这两个函数外,其实还有其他方法的,最简单的莫过于直接利用其是否打开属性,不需要定义函数:

CurrentProject.AllForms![窗体名称].IsLoaded

 



白发学者 发表于:2009-08-14 22:51:41

谢谢版主,希望能有成才的那一天。 哈 哈

 



总记录:7篇  页次:1/1 9 1 :