访问表单的文本框未显示值
Posted
技术标签:
【中文标题】访问表单的文本框未显示值【英文标题】:Access Form's textbox not showing value 【发布时间】:2015-08-17 15:00:04 【问题描述】:我有一个格式为 f_FeuilleBleue 的未绑定文本框。在我的代码中,我给了它一定的值;
Debug.Print strAHNS '00 0AA 00-100 F TX-01
Form_f_FeuilleBleue.txt_AHNS = strAHNS
如果我在下一行设置一个停止点,即时窗口会显示
?Form_f_FeuilleBleue.txt_AHNS
answer: 00 0AA 00-100 F TX-01
但是,我仍然认为它在我的表单中是空白的。没有要读取的数据!
我该如何解决这个问题?是屏幕更新的问题吗? (我没有将其设置为关闭)也许表单更新? (我在更新前事件中有一个 msgBox,但它没有出现在那个事件中)
编辑 - 附加信息:
当我打开表格时,没有问题。我可以通过表单或代码更改值。但是,仅当从菜单样式的表单打开表单时才会出现此问题。代码如下。即使在打开的子完成后,文本框也不会更新(视觉上 - 它的价值)。测试后,我看到从另一个 sub 更改文本框的值时不会启动 Change 和 Update 事件(可能是私人 subs 的原因?)但是为什么即使在 subs 结束后它仍然不显示值?
可能非常非常适合阅读,但我不知道该怎么做:Obtaining textbox value in change event handler
这是打开表单的代码:
Private Sub Command7_Click()
Dim strAHNS As String
Dim strquery As String
strAHNS = Replace(Mid(Me.Combo_Dessin2, InStr(Me.Combo_Dessin2, "=") + 1), "=", " ")
strquery = "[ID] = (SELECT Max([ID]) FROM [Feuilles])"
Debug.Print strquery
If (PremierAffichage) Then
DoCmd.OpenForm FormName:="f_feuillebleue", WhereCondition:=strquery
Else
MsgBox "Le projet ou dessin n'a pas été trouvé."
End If
End Sub
Function PremierAffichage() As Boolean
Dim rsFeuilles As DAO.Recordset
Dim rsProjets As DAO.Recordset
Dim strContrat As String
Dim strProjet As String
Dim strDessin As String
Dim sqlquery As String
Dim strAHNS As String
Dim strGroupe As String
Dim strMachine As String
If IsNull(Me.Combo_Dessin2) Or IsNull(Me.Combo_Projet) Or Me.Combo_Dessin2.Value = "" Then
PremierAffichage = False
Exit Function
End If
strProjet = Me.Combo_Projet
strAHNS = Me.Combo_Dessin2
strMachine = Mid(strAHNS, 4, 3)
strGroupe = Mid(strAHNS, 8, 2)
Debug.Print strProjet & " ** " & strAHNS & " ** " & strMachine & " ** " & strGroupe
sqlquery = "SELECT [AHNS], [Contrat], [No Projet], [EP (groupe)], [Type machine], [Mois] FROM [Feuilles]" 'WHERE [AHNS] = '" & strAHNS & "'"
Set rsFeuilles = CurrentDb.OpenRecordset(sqlquery)
sqlquery = "SELECT [Projet HNA] FROM [Projets] WHERE [Projet AHNS] = '" & strProjet & "'"
Set rsProjets = CurrentDb.OpenRecordset(sqlquery)
Debug.Print strAHNS '========================================--------
Form_f_FeuilleBleue.txt_AHNS = strAHNS ' this works in .value but not showing the result
DoEvents ' any changes from there on don't update the value visually
' ==========================================------
If rsProjets.RecordCount > 0 Then
rsFeuilles.AddNew
rsFeuilles![Contrat] = rsProjets![Projet HNA]
rsFeuilles![No Projet] = strProjet
rsFeuilles![AHNS] = strAHNS
rsFeuilles![Mois] = MonthName(Mid(Date, 6, 2))
If strMachine Like "[A-Z][A-Z][A-Z]" Then
rsFeuilles![Type machine] = strMachine
rsFeuilles![EP (groupe)] = strGroupe
End If
rsFeuilles.Update
PremierAffichage = True
End If
rsProjets.Close
Set rsProjets = Nothing
rsFeuilles.Close
Set rsFeuilles = Nothing
End Function
【问题讨论】:
这只是在调试吗?在设置它的行之后尝试 DoEvents。 这在即时窗口和实际代码中都有。 DoEvents 并没有改变任何东西(我只是在下一行自己写了 DoEvents,这是你想尝试的吗?) 是的。我已经看到它解决了一些像这样的奇怪问题。 Form_f_FeuilleBleue 是您的文本框的名称吗?可以通过 Form_f_FeuilleBleue.text 设置吗? 我从来不需要使用它,但表单确实有重绘方法。 form1.重绘。看看有没有什么作用。 您还可以将 Update 或 Change 事件更改为 public,并在设置值后手动调用它。 Form_f_FeuilleBleue.txt_AHNS_Change 【参考方案1】:将您的值分配给活动表单实例(打开的表单)而不是表单的类。
所以假设打开表单的名称是 f_FeuilleBleue 并且您想将该值分配给表单的 txt_AHNS 控件...
'Form_f_FeuilleBleue.txt_AHNS = strAHNS
Forms!f_FeuilleBleue!txt_AHNS = strAHNS
按名称引用表单作为Forms
集合的成员。
【讨论】:
我不知道这可以做到。还有其他情况可以选择相反的吗? 我认为当你真正想使用类本身时,你会使用 Form_f_FeuilleBleue。但我并没有真正使用它,所以不能说更多有用的话。以上是关于访问表单的文本框未显示值的主要内容,如果未能解决你的问题,请参考以下文章
Ajax AutoCompleteExtender文本框未在边缘浏览器中触发文本更改事件