为什么忽略我的.setfocus?

Pow*_*ser 8 ms-access vba access-vba ms-access-2010

我有一个带有文本框的Access表单,该表单允许重复键入数字,按Enter键,并让脚本执行操作.对于速度,该字段应在DoStuff()完成后保持焦点.

但是,虽然我确定它DoStuff()已经运行,但焦点始终转到Tab键顺序中的下一个字段.这就像是Me.MyFld.SetFocus被忽略了.

完成后如何将重点放在此字段上DoStuff()

Private Sub MyFld_KeyDown(KeyCode As Integer, Shift As Integer)  
     If KeyCode = vbKeyReturn Then  
         DoStuff  
         Me.MyFld.SetFocus  
     End If
End Sub
Run Code Online (Sandbox Code Playgroud)

tec*_*tle 14

如果你看一下可以改变焦点的按键的事件顺序,你可以看到它始终遵循这种模式:

KeyDown ? BeforeUpdate ? AfterUpdate ? Exit ? LostFocus
Run Code Online (Sandbox Code Playgroud)

你可以在那里的任何地方重新设置焦点,它仍然会遵循模式.所以我们需要告诉它停止遵循模式.替换你Me.MyFld.SetFocusDoCmd.CancelEvent,它应该解决你的问题.基本上,这只是你踢出上面的图案,所以ExitLostFocus事件永远不会触发...

  • 我不得不问.`LostFocus`在第一个文本框上执行后,为什么它会转到Tab键顺序中的下一个控件?用户没有按Tab键,只有Enter键. (2认同)

Joh*_*kke 5

解决方法是将焦点移动到另一个控件,然后再返回到第一个控件.像这样:

Private Sub MyFld_KeyDown(KeyCode As Integer, Shift As Integer)  
    If KeyCode = vbKeyReturn Then  
        DoStuff
        Me.anotherControl.SetFocus
        Me.MyFld.SetFocus  
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)