访问表单的文本框未显示值

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。但我并没有真正使用它,所以不能说更多有用的话。

以上是关于访问表单的文本框未显示值的主要内容,如果未能解决你的问题,请参考以下文章

预输入数据列表文本框未重置

C# - 上次编辑的文本框未保存到数据库

Ajax AutoCompleteExtender文本框未在边缘浏览器中触发文本更改事件

IsEnabled="False" 状态的 WPF 文本框未应用正确的背景颜色

访问文本框值以显示邮件

在网格视图行中输入键文本框未获取 id 选择