在一定的空闲时间后自动关闭表单
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
【讨论】:
以上是关于在一定的空闲时间后自动关闭表单的主要内容,如果未能解决你的问题,请参考以下文章