访问表单事件 - 使用什么控件来动态执行代码

问题描述

我创建了一个表单来输入培训活动。 我的表单顶部有一个未绑定的计算控件,它反映了培训的状态。计算控制源:

=IIf(IsNull([Txt_TrainComm]),"NEW",IIf(IsNull([Txt_TrainComp]),"COMMENCED",IIf(IsNull([txtAssNom]),"ASSESSMENT required",IIf(IsNull([txtAssComp]),"ASSESSMENT - NOMINATED","ASSESSED"))))

我的表单有几个关键日期(文本框名称:txt_TrainComm、txt_TrainComp、txtAssNom 和 txtAssComp)要按该顺序输入。我想要发生的是在输入日期时启用其他表单控件,使页脚可见等。我编写了一个代码,当从一个记录切换到下一个记录时,将其放置在表单当前事件中时可以正常工作。请在下面查看我的代码

Private Sub Form_Current()
If Me.StatusName = "NEW" Then
Me.StatusName.Width = 1418
Me.Txt_TrainComp.Enabled = False
Me.Txt_TrainComm.Enabled = True
Me.Page_Assessment.Enabled = False
    If Me.FormFooter.Visible = True Then
    Me.FormFooter.Visible = False
    Me.cmdshowdetails__.Caption = "Show Assessment <<"
    Dim WindowHeightNEW As Long
    WindowHeightNEW = Me.WindowHeight - Me.FormFooter.Height
    Me.Move Left:=Me.WindowLeft,Top:=Me.WindowTop,Height:=WindowHeightNEW
    End If
End If

If Me.StatusName = "COMMENCED" Then
Me.StatusName.Width = 2552
Me.Txt_TrainComp.Enabled = True
Me.Txt_TrainComm.Enabled = True
Me.Page_Assessment.Enabled = False
    If Me.FormFooter.Visible = True Then
    Me.FormFooter.Visible = False
    Me.cmdshowdetails__.Caption = "Show Assessment <<"
    Dim WindowHeightCOMM As Long
    WindowHeightCOMM = Me.WindowHeight - Me.FormFooter.Height
    Me.Move Left:=Me.WindowLeft,Height:=WindowHeightCOMM
    End If
End If


If Me.StatusName = "ASSESSMENT required" Then
Me.StatusName.Width = 4253
Me.Txt_TrainComp.Enabled = True
Me.Txt_TrainComm.Enabled = True
Me.Page_Assessment.Enabled = True
    If Me.FormFooter.Visible = False Then
    Me.FormFooter.Visible = True
    Me.cmdshowdetails__.Caption = "Hide Assessment <<"
    Dim WindowHeightASSREQ As Long
    WindowHeightASSREQ = Me.WindowHeight + Me.FormFooter.Height
    Me.Move Left:=Me.WindowLeft,Height:=WindowHeightASSREQ
    End If
End If'

If Me.StatusName = "ASSESSMENT - NOMINATED" Then
Me.StatusName.Width = 4925
Me.Txt_TrainComp.Enabled = False
Me.Txt_TrainComm.Enabled = False
Me.Page_Assessment.Enabled = True
    If Me.FormFooter.Visible = False Then
    Me.FormFooter.Visible = True
    Me.cmdshowdetails__.Caption = "Hide Assessment <<"
    Dim WindowHeightASSNOM As Long
    WindowHeightASSNOM = Me.WindowHeight + Me.FormFooter.Height
    Me.Move Left:=Me.WindowLeft,Height:=WindowHeightASSNOM
    End If
End If


If Me.StatusName = "ASSESSED" Then
Me.StatusName.Width = 1985
Me.Txt_TrainComp.Enabled = False
Me.Txt_TrainComm.Enabled = False
Me.Page_Assessment.Enabled = True
    If Me.FormFooter.Visible = False Then
    Me.FormFooter.Visible = True
    Me.cmdshowdetails__.Caption = "Hide Assessment <<"
    Dim WindowHeightASSD As Long
    WindowHeightASSD = Me.WindowHeight + Me.FormFooter.Height
    Me.Move Left:=Me.WindowLeft,Height:=WindowHeightASSD
    End If
End If

End Sub

我无法开始工作,将代码放置在正确的控制事件中,例如,当在 txt_TrainComp 中输入日期时,代码会动态运行。我必须切换到不同的记录,然后返回以使更改生效,这不是预期的结果。我尝试过 BeforeUpdate、AfterUpdate、OnDirty、OnChange,但它们似乎不起作用。

有人可以看看我需要做的事件或代码更改并提出建议吗?希望我提供了足够的信息。

提前致谢。

解决方法

感谢 RetiredGeek,FormObject_LostFocus() 是在焦点改变后运行代码的正确事件。

Private Sub Txt_TrainComm_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub

Private Sub Txt_TrainComp_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub

Private Sub txtAssComp_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub

Private Sub txtAssNom_LostFocus()
Call FormUpdate
Me.TrainingStatus.Value = Me.StatusName
End Sub