我有MS Access 2003 DB。
表单上的按钮的事件处理程序是否可以触发两次?
我似乎有证据证明这种情况正在发生,因为我有一个工资单流程 记录整个过程和过程在日志中重复。
我认为这在VBA中是不可能的???
编辑: 我发现事实上,当用户点击两次并将事件排队两次时它确实发射了两次。 这是我对代码所做的修复,它使用标志m_locked作为示例来测试:
[代码]
Private m_locked As Boolean
Private m_count As Integer
Private Sub Command0_Click()
On Error GoTo Err_Command0_Click
' wait
If Not m_locked Then
m_locked = True
Dim startTime As Date
startTime = Now()
While DateDiff("s", startTime, Now()) < 3
DoEvents
Wend
' increment counter
m_count = m_count + 1
Command0.Caption = m_count
m_locked = False
End If
Exit_Command0_Click:
Exit Sub
Err_Command0_Click:
MsgBox Err.Description
Resume Exit_Command0_Click
End Sub
[/代码]
马尔科姆
答案 0 :(得分:0)
看到你的“解决方案”我也建议你指定双击事件。这样您就可以轻松区分用户是否通过“debug.print”单击了一次或两次。
要防止用户执行额外的单击,请在表单模块级别声明一个私有布尔变量,在事件过程中将其设置为TRUE,在timer事件中将其设置为FALSE,并将表单的计时器配置为1000,例如(它是毫秒)。
Option Explicit
Option Compare Database
Private oneClick As Boolean
Private Sub cmdMyButton_Click()
If not oneClick Then
' Perform your actions here
End If
oneClick = True
End Sub
Private Sub Form_Timer()
oneClick = False
End Sub
哦,请使用告诉其含义的变量和控制名称: - )
答案 1 :(得分:0)
如果您不希望用户单击按钮两次,则只需以下简单代码:
Private Sub Command0_Click()
Command0.Enabled = False
' Continue with your code here ...
End Sub