Access表单加载时如何将绑定文本框值复制到未绑定文本框?
解决Access表单加载时复制计算控件值的问题
问题背景
- 绑定计算控件
txtField1的控件源为:
可正常显示内容,但含撇号时无法通过插入查询保存到表。=IIf(IsNull([txtID]),"",DLookUp("[Reason_1]","[Escalations]","[ID]=" & [txtID] & "")) - 未绑定控件
txtField2手动输入含撇号内容可正常提交,需要在表单加载时将txtField1的值复制到txtField2。 - 尝试在表单Load事件中执行
txtField2.Value = txtField1.Value,txtField2显示为空;但在txtField2_Click事件中执行相同代码可正常复制。
解决方案
原因分析
表单Load事件触发时,计算控件txtField1的数据源还未完成计算和渲染,此时读取其Value属性会得到空值。而点击事件触发时,控件已经完成加载,所以能正常读取值。
可行方法
使用Form_Current事件
这个事件在表单加载完成、每次切换记录时都会触发,能确保控件值已加载:Private Sub Form_Current() ' 先强制刷新txtField1确保值已计算 Me.txtField1.Requery Me.txtField2.Value = Me.txtField1.Value End Sub使用Form_Activate事件
表单激活时触发,适合单表单场景:Private Sub Form_Activate() Me.txtField1.Requery Me.txtField2.Value = Me.txtField1.Value End Sub延迟赋值(用Timer)
如果上述事件仍有问题,可通过Timer控件延迟执行赋值:- 给表单添加一个Timer控件,设置
Interval属性为100(100毫秒) - 在Timer事件中执行赋值并关闭Timer:
Private Sub Timer_Timer() Me.txtField2.Value = Me.txtField1.Value Me.Timer.Enabled = False ' 只执行一次 End Sub
- 给表单添加一个Timer控件,设置
额外提示
如果txtID的值是动态变化的(比如用户修改后),可以在txtID_AfterUpdate事件中也添加赋值代码,确保txtField2同步更新:
Private Sub txtID_AfterUpdate() Me.txtField1.Requery Me.txtField2.Value = Me.txtField1.Value End Sub
内容的提问来源于stack exchange,提问作者Shiela
相关产品推荐
相关产品推荐

