[MSAccess Form文本框在编辑时如何从'Value'属性获取?

问题描述 投票:1回答:2

如何编辑正在编辑的MS Access Form的textBox控件中键入的值?我想显示一个搜索结果(在列表框中),该搜索结果随着添加到用于搜索的文本框中的每个新字符而更新?查询到位,事件到位,唯一缺少的是类型值存储在哪里,因为在“键入”事件期间它不在控件的.Value属性中。

vba ms-access access-vba ms-access-forms
2个回答
0
投票

正如人们所期望的,文本框的'Value'属性不会在更改或键入事件上更新。如果您希望在键入内容时捕获键入到textBox中的内容,则需要查找'Text'属性,如下所示:

Me.txtSearchBox.Text

[不幸的是,除非textBox处于活动状态,否则无法访问此属性,因此,如果您在与其他控件交互时阅读.Text,则需要测试textBox是否处于活动状态,并且故障转移到检查“值”,如:

' assuming you've already dim'd the strSearchBox as String here...
If Screen.ActiveControl.Name = txtSearchBox.Name Then
    ' the control is active, so for the moment, Text is accessible
    strSearchBox = Trim(txtSearchBox.Text)
Else
    ' textBox failover:
    ' Value is always accessible
    strSearchBox = Trim(txtSearchBox.Value)
End If
' strSearchBox now has the contents of txtSearchBox, one way or the other

是,我是一个强制性的Trim()er。

[不幸的是,如果要在进出调试或加载Screen.ActiveControl.Name的形式时运行此代码,则将无法调用该代码。您可以通过测试所涉及的表单是否处于活动状态来解决此问题,如下所示:

' no reason not to test for the specific form as opposed to any form, IMO
If Screen.ActiveForm.Name <> Me.Name Then
    ' activeform failover:
    ' Value is always accessible
    strSearchBox = Trim(txtSearchBox.Value)
Else
    ' there's an ActiveForm loaded, so there is an ActiveControl Name to test
    If Screen.ActiveControl.Name = txtSearchBox.Name Then
        ' the control is active, so for the moment, Text is accessible
        strSearchBox = Trim(txtSearchBox.Text)
    Else
        ' textBox failover:
        ' Value is always accessible
        strSearchBox = Trim(txtSearchBox.Value)
    End If
End If

我希望这可以节省一些时间。


0
投票

实现此目的的关键是使用文本框的OnChange事件,该事件在每次更改文本框内容的击键时触发。

同样,您可以通过为Text事件引用事件处理程序中文本框的OnChange属性来轻松更改列表框的内容。

这是一个非常基本的演示,搜索动物名称列表:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.