如何在Access连续表单(VBA)中设置焦点

时间:2015-02-04 21:52:24

标签: vba ms-access

现在它被忽略了。这里的代码是最基本的代码,它会导致当前不可避免的情况,但我打算将这些情况排除在外。只需要让基本的setFocus工作。

Private Sub fieldbox_LostFocus() 
Me.fieldbox.SetFocus
End Sub

以常规形式,它按预期工作。当fieldbox失去焦点时,焦点将重新设置为fieldbox。

以连续的形式,它不起作用,并且不会发生设定焦点。这可能是由于每个记录存在多个fieldbox实例。

我想要的是,如果连续表单上存在fieldbox1,2和3,并且您单击fieldbox2,我该如何将焦点设置回fieldbox2?

1 个答案:

答案 0 :(得分:1)

您需要使用表单的BeforeUpdate()事件而不是焦点:

Private Sub Form_BeforeUpdate(Cancel as Integer)
If RecordOK = False Then
  Dim response, strMsg as String
  strMsg = "There is data missing from the record.  " _
    & vbCrLf & "Press Yes to continue, editing.  " _
    & vbCrLf & "Press No to discard all changes."
  Cancel = True
  response = MsgBox(strMsg, vbYesNo)
  If response <> vbYes
    Me.Undo
  End If
End If

以上代码未经过测试,可能需要一些调整,粘贴和查看。我最近的更新提供了更清晰的用户对对话框响应的处理。 (你确实设置了Option Explicit,不是吗?!)

控制级别找到此方法的一个很好的解释here。但您可能希望使用表单事件,如上所述。有时我只是暂时在事件中插入Msgbox提示,以便我可以看到什么时候发射。

请注意,对话框应提供有关如何避免擦除用户到目前为止完成的工作的线索。