我遇到了很大的问题,在打开表单时,特定的数据表记录会成为焦点,无需用户干预。
我有一个程序如下:
Public Sub GoToID(ID As Integer, Optional fldName As String)
On Error Resume Next
With Me.RecordsetClone
.FindFirst "ID = " & ID
If Not .NoMatch Then Me.Bookmark = .Bookmark
End With
Dim ctl As Control: Set ctl = Me.Controls(fldName)
If Not ctl Is Nothing Then ctl.SetFocus
End Sub
当我在button_click上有这个,或者当目标表单已经打开时从另一个表单上的过程调用时,它都可以很好地工作。
我希望有类似的东西:
Private Sub Form_Activate()
Me.GoToID User.RecordIdFromLastSession, "Title"
End Sub
我得到的行为是,执行行没有通过GotoID程序,但是加载的数据表单总是选择了最顶层的记录,并且选择了最左边的tab-stoppable字段,其中我期待记录选择器已移至User.RecordIdFromLastSession的“标题”字段。
如果我将函数调用放入表单的DblClick事件中,例如,双击表单标题,该函数运行正常,但我不能这样做,因为我在用户导航记录时动态更新User.RecordIdFromLastSession,使用Form_Current事件。
由于我似乎无法在第一个Form_Current事件触发之前选择上一个会话的记录,因此以前的会话数据将被覆盖,而哪个记录ID是表单打开时的最顶层记录。
非常感谢任何帮助/指示。
答案 0 :(得分:0)
好的我现在已经对此进行了排序,但我觉得我需要在这里做一些注意事项,因为微软的指导中有些内容误导了事情。
微软说:
当您打开表单时,表单会发生以下事件序列:
打开>加载>调整大小>激活>电流的
当您在两个打开的表单之间切换时,第一个表单会发生Deactivate事件,第二个表单会发生Activate事件 形式:
停用(form1)>激活(form2)
我的情况是,我已经打开了一个表单("任务"),我第一次打开另一个表单(" Memos"),然后离开任务开。
上述指导将使您假设事件的顺序为:
Tasks.Deactivate> Memos.Open> Memos.Load> Memos.Resize> Memos.Activate> Memos.Current
但是,当我(最终)完成所有事情时执行的事件的实际顺序是:
Tasks.Deactivate> Memos.Activate> Memos.Current> Memos.Open
在阅读MS的指导后,这是违反直觉的。我没有在我的表单中使用Load事件,但是相信Memos.Load必须在Memos.Open之前发生,否则Memos.Current将无法触发/识别记录中的记录。记录集。
无论如何,我想要的用例现在正在运行,并且我已经设法在此过程中显着优化了我的编码,这只能是一个额外的好处。 :)