在一定的空闲时间后自动关闭表单

Posted

技术标签:

【中文标题】在一定的空闲时间后自动关闭表单【英文标题】:Automatically Close Form After Certain Idle Time 【发布时间】:2014-05-30 06:59:17 【问题描述】:

我的访问表单有点问题。

我有两种形式:

菜单形式 输入表单

input-form 空闲一分钟后,我想关闭它并返回 menu-form。

这是我的代码不起作用。

Public ExpireTime    As Date  'expiration time-date value

Sub ResetExpiration()             

    If ExpireTime <> 0 And ExpireTime > Now Then
        Application.OnTime ExpireTime, "FormExpire", schedule:=False
    End If

    ExpireTime = Now + 1 / 1440#    

    Application.OnTime ExpireTime, "FormExpire", schedule:=True

End Sub

我还创建了一个包含这个的宏。

Sub FormExpire()
   Unload input-form
End Sub

【问题讨论】:

【参考方案1】:

您需要将form.Timer 设置为60000(即1 分钟),然后使用OnTimer 事件来检查某些属性是否已更改。下面我快速写了一些东西给你一个想法,但它并不完整,也没有经过测试。

Option Compare Database
Option Explicit

Dim isIdle As Boolean


Private Sub Form_LostFocus()
    'you can use this event also
End Sub


Private Sub Form_Timer()
    Dim ctlName As String, wasDirty As Boolean
    If ctlName = vbNullString Then ctlName = Me.ActiveControl.Name
    If Me.ActiveControl <> ctlName Then isIdle = False
    If wasDirty <> Me.Dirty Then isIdle = False
    'more checks....
    If isIdle Then DoCmd.Close acForm, Me.Name
End Sub

【讨论】:

【参考方案2】:

这里有几个潜在的问题。 首先,这不是您关闭表单的方式。

这个:

Sub FormExpire()
   Unload input-form
End Sub

应该看起来更像这样:

Sub FormExpire()
    DoCmd.Close acform, Me.Name
    DoCmd.OpenForm "menu-form"
End Sub

您的第二个问题是我不相信 Access 提供了 Application.Ontime 方法。 MSDN 说这是一个 Excel 函数,我在 Access Documentation 中找不到它。我个人很想看到您使您的方法与Access form Timer Event 一起使用。

我不确定这是否重要,但我认为这就是你想要做的。

Public ExpireTime    As Date  'expiration time-date value

Private Sub InputForm_Timer()             

    If ExpireTime <> 0 And ExpireTime > Now Then
        Call FormExpired
    Else
        ' reset timer
        ExpireTime = Now + 1 / 1440#             
    End If

End Sub

如果不包括@iDevelop 的answer,我不确定此方法是否有效。我只是想帮助澄清你哪里出错了。

【讨论】:

【参考方案3】:

我意识到这个线程已经过时了,但我最近经历了需要从计时器事件中关闭表单并在这里找到了答案。我的情况略有不同,因为我有几个表格要关闭,所以这是我的解决方案。

Private Sub Form_Timer()

Dim daysRemaining As Integer
Dim endDate As Date

endDate = "4/15/2021"

daysRemaining = DateDiff("d", Now, endDate)
 
MsgBox ("This is an evaluation version of the application. You have " & Str(daysRemaining) & " days of use remaining")
    
If daysRemaining < 1 Then
    Close_All
End If

End Sub

Private Sub Close_All()
    For Each myForm In CurrentProject.AllForms
        strFormName = myForm.name
        DoCmd.Close acForm, strFormName
    Next

End Sub

【讨论】:

以上是关于在一定的空闲时间后自动关闭表单的主要内容,如果未能解决你的问题,请参考以下文章

我设计的VFP进销存系统,在用户登录后登录界面还在,不能自动关闭,另外设计的菜单显示不出,还是系统的

Linux反空闲的设置和关闭

关闭 PhpMyAdmin 自动注销

运行了“自动关闭空闲的IDE通道”怎么恢复?

时间限制关闭窗体的几点体会

自动完成关闭在边缘浏览器上不起作用