输入 access 2007 表单时如何更新另一个文本框?

Posted

技术标签:

【中文标题】输入 access 2007 表单时如何更新另一个文本框?【英文标题】:How to update another text box while typing in access 2007 form? 【发布时间】:2012-01-01 21:06:25 【问题描述】:

我有几个文本框,必须用从 0 到 100 的数值填充。在它们下面有另一个文本框,代表总数(上面文本框中的值的总和)。在上面的任何其他文本框中键入内容时,如何更新总和文本框?

【问题讨论】:

您可以为计算的总数使用标签而不是可编辑的文本框吗? 【参考方案1】:

如果您对更新框(按 Enter、Tab 或类似键)后总和框更新感到满意,则无需任何代码即可完成。首先需要将要求和的文本框的格式设置为数值,那么求和框的控制源就变成了:

=Nz([text0],0)+Nz([text2],0)+Nz([text4],0)+Nz([text6],0)+Nz([text8],0) ...

注意 Nz 的使用,可以通过设置要求和的各种文本框的默认值属性来消除这种情况。

需要以这种方式求和的大量控件通常表明数据库设计存在错误。您通常会认为这种东西是一个单独的记录集,可以更容易地求和。

【讨论】:

【参考方案2】:

我知道这已经过时了,但 Google 并没有为这个主题提供太多信息,而且这个帖子也没有真正的帮助。我想出了一个非常简单的方法来做到这一点,所以希望其他寻找这个的人会觉得这很有帮助。

我需要的是实际文本而不是数字,但同样适用。

要执行 OP 的要求,您至少需要 3 个文本框。 1 是您每次输入时要更新的文本框,2 是您将要输入的文本框,3 是隐藏的文本框。

设置文本框 1 以引用其控件源中隐藏文本框 3 的值:

="something in my textbox " & [textbox3]

在文本框 2 右侧的 OnChange 事件中,有一行将隐藏文本框 3 的值设置为您正在输入的文本框 2 的 Text 属性:

Private Sub textbox2_Change()
    Me.textbox3.Value = Me.textbox2.Text
End Sub

每次更新隐藏文本框 3 的值时,显示的文本框 1 中的计算/引用都会更新。无需保存插入符号位置或本文中提到的任何其他内容。

【讨论】:

【参考方案3】:

通过使用文本框的 On Lost Focus 事件,我能够在 Access 2007 中执行此操作。 只需将这样的内容放在要添加的每个文本框的 On Lost 焦点事件上,只需确保将每个文本框的默认值设置为 0。

Me.Totals.Value = Me.Text1.Value + Me.Text2.Value + 等等..

当您单击下一个文本框或任何地方,只要它失去焦点,您的总和就会出现在“总计”框上。您可以添加任意数量的文本框,只需将它们包含在代码中即可。

【讨论】:

【参考方案4】:

这是有问题的,因为 Access 中的 asinine 要求必须先将焦点设置到文本区域才能获得它们的值。我建议您更改您的设计,以便更新文本字段以响应按钮单击而不是更改。

如果您想采用更改时更新路线,您可以将更改事件附加到每个附加文本字段。事件处理程序需要保存插入符号位置/选择长度,更新输出文本字段中的总和,并恢复插入符号位置。您需要保存/恢复插入符号的位置,因为焦点改变时它会丢失。

以下是两个文本字段(txt1 和 txt2)的示例。输出字段名为 txtOutput。

Private Sub txt1_Change()
    Dim caret_position As Variant

    caret_position = Array(txt1.SelStart, txt1.SelLength)

    UpdateSum

    txt1.SetFocus
    txt1.SelStart = caret_position(0)
    txt1.SelLength = caret_position(1)
End Sub

Private Sub txt2_Change()
    Dim caret_position As Variant

    caret_position = Array(txt2.SelStart, txt2.SelLength)

    UpdateSum

    txt2.SetFocus
    txt2.SelStart = caret_position(0)
    txt2.SelLength = caret_position(1)
End Sub

Private Sub UpdateSum()
    Dim sum As Variant
    sum = CDec(0)

    txt1.SetFocus
    If IsNumeric(txt1.Text) Then
        sum = sum + CDec(txt1.Text)
    End If

    txt2.SetFocus
    If IsNumeric(txt2.Text) Then
        sum = sum + CDec(txt2.Text)
    End If

    txtOutput.SetFocus
    txtOutput.Text = sum
End Sub

【讨论】:

控件必须具有焦点才能获取值是完全不正确的。控件必须具有焦点才能获取 text 属性,而不是 value 属性。 感谢指正。但是,Value 属性在事件处理程序中已过时,因此您需要在这种情况下使用 Text 才能使其正常工作。 恐怕这也不是真的。如果控件没有失去焦点,则只需要使用 text 属性,如果是这种情况,则 text 属性可用,尽管它可能不是最终值。

以上是关于输入 access 2007 表单时如何更新另一个文本框?的主要内容,如果未能解决你的问题,请参考以下文章