Access交流中心

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

[5分]如何用代码按倒序依次关闭先后打开的窗体?

浪淘沙  发表于:2014-09-19 14:51:23  
复制

如题,目的:要在登陆窗口的时钟事件里设置系统闲置到限定时间,用代码自动关闭其他已打开的所有窗口。

要求:写出一段代码,实现按窗体打开的先后次序的倒序依次关闭所有打开的窗口。重点是:按倒序依次关闭

注意:在系统操作过程中其他窗体有可能被反复开启关闭,原则上不想新建表来记录窗体的开启关闭如果用数组追踪,初想了想觉得比较麻烦,变量不太好定义。

先在此问一下,谁做过类似的案例,有没有简单可调用的函数方法?

 

Top
煮江品茶 发表于:2014-09-19 17:17:34
参见《屁股》一文即可。

浪淘沙 发表于:2014-09-22 23:37:03

谢谢老汉与我分享的趣味作品,周末外出了,今天才拜读,将列表框的属性rowsource用的极妙,很受启发。

在我的实际使用中,逻辑性要求比作品严密,窗体的关闭次序上需要进一步控制,作品中非活动窗体的关闭是先到设定闲置时间的先关,实用中逻辑性往往是后打开的先关,关闭窗体时对前一级的窗体有相关操作指令,如果前面的窗体先关闭了,会导致程序错乱。另外如果某指令打开的是主副两个窗体,附属窗体始终处于非活动窗体状态,那就取不到窗体数据,当然这个可以在主窗体关闭事件中连带关闭。用遍历已开启窗体的当前活动属性记录窗体的最后使用时间,于我的要求还是存在逻辑漏洞的,我只需要第一次开启的时间,后面的时间刷新不需要。

我猜想应该有内置的函数方法一直在记录每个窗体的开启和关闭,活动或非活动,从底层支持系统的正常运行,但是不一定开放给用户。我在系统自带表里找了找,没发现有这方面的记录,难道在ldb文件里?

反复考虑下来,我的方案是这样的,每个窗体中原来都已调用了一个共用的初始化函数,在这个函数中加入对窗体的开启时间的记录,在Time事件里用老汉的办法遍历窗体更新rowsource,剔除已关闭的窗体列表框值绑定为时间值(列表框的值列表能否直接排序?暂时没思路,赋给数组后降序排列,再按次序关闭窗体。另外的方法还是建表记录窗体开启时间,关闭则删除记录,这样可以调用域聚合函数DMAX,DLOOKUP直接操作,,后面操作比较方便。


好了,具体方案也有了,没老汉的启发,想法不会落地,谢谢老汉!结贴!


附:分享一下我用的一组API函数,用来侦测系统闲置时间比较方便。第一个获得最后的操作时间值,另一个获得系统运行时间值,差值就是闲置时间。

Private Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As Boolean

Private Declare Function GetTickCount Lib "kernel32" () As Long 

Private Type LASTINPUTINFO
    cbSize As Long
    dwTime As Long
End Type
Dim lii As LASTINPUTINFO

‘---------------------------------------------------------------------------------------------------------------

    If GetLastInputInfo(lii) Then
        If (GetTickCount - lii.dwTime) / 60000 >= 3 Then
            DoCmd.Quit 

            'Shell "shutdown.exe -s -t 180"   '启动系统关机程序,3分钟倒计时!类似于下载程序完成后自动关机。
            'If MsgBox("由于本机3分钟没有操作,系统将退出用户登录", vbYesNo + vbExclamation + vbDefaultButton2, "提示") Then
                ’。。。。。。。。。

            ’End If
        End If
    End If






zpy2 发表于:2014-09-23 07:26:13
create a class to store index of forms.

浪淘沙 发表于:2014-09-23 15:38:42
工作已做好,不过3楼的建议很好,之前没想起这个方向,类模块可以自定义,比较开放,应该没问题,有空会研究一下。谢谢zpy2

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