如何在编辑时从 MS Access 表单文本框获取 'Value' 属性?
How do I get the 'Value' property from a MSAccess Form textBox while it's being edited?
如何在编辑 MS Access Form 的文本框控件时捕获输入的值?我想显示搜索结果(在列表框中),该搜索结果随着添加到用于搜索的文本框的每个新字符而更新?查询到位,事件到位,唯一缺少的是键入值存储在哪里,因为在 "typing" 事件期间它不在控件的 .Value 属性 中。
注意,我在下面(以及之前的编辑中)阅读状态的许多尝试都是垃圾。我有这个在不同时间执行的查询构建函数(未在问题中列出,mia culpa)。我现在将状态作为参数传递给所述查询函数,而不是尝试主动读取它。我将此作为对任何走上类似道路的人的警告。如果到目前为止我误导了任何人,我深表歉意。
textBox 的 'Value' 属性 不会像人们预期的那样在更改或键入事件时更新。如果您希望在输入文本框时捕获输入的内容,您需要查找 'Text' 属性,如:
Me.txtSearchBox.Text
不幸的是,除非文本框处于活动状态,否则无法访问此 属性,因此如果您在阅读 .Text 的同时与其他控件交互,您将需要测试文本框是否处于活动状态,这它不会,并且会失败并转而检查 'Value',如:
' 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 & vbNullString)
Else
' textBox failover:
' Value is always accessible
strSearchBox = Trim(txtSearchBox.Value & vbNullString)
End If
' strSearchBox now has the contents of txtSearchBox, one way or the other
是的,我是一个有强迫症的 Trim()er。是的,我通过附加“”转换为字符串(根据@ComputerVersteher 更正为 vbNullString——非常感谢)。如果那太可怕了,请对我大喊大叫。关键是,.Value 在表单加载时可以为 null,并且将 null 值分配给字符串变量是破坏性的。
不幸的是,如果您要 运行 此代码在进入和退出调试或加载表单时 Screen.ActiveControl.Name 将无法调用。您可以通过测试相关表单是否已实际加载来解决此问题,如下所示:
If not CurrentProject.AllForms(Me.Name).IsLoaded Then
' activeform failover:
' Value is always accessible
strSearchBox = Trim(txtSearchBox.Value & vbNullString)
Else
' there's an Form 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 & vbNullString)
Else
' textBox failover:
' Value is always accessible
strSearchBox = Trim(txtSearchBox.Value & vbNullString)
End If
End If
我希望这能为一些人节省一点时间。
如果您阅读它并且不听从我的建议,也许它会节省您的时间。查看编辑以查看有关读取 VB 表单状态的其他错误想法以及有关控件名称唯一的错误假设等...
实现这一点的关键是使用文本框的 OnChange
事件,每次击键都会触发该事件,从而更改文本框的内容。
因此,您可以通过在 OnChange
事件的事件处理程序中引用文本框的 Text
属性 轻松更改列表框的内容。
这是搜索动物名称列表的非常基本的演示:
如何在编辑 MS Access Form 的文本框控件时捕获输入的值?我想显示搜索结果(在列表框中),该搜索结果随着添加到用于搜索的文本框的每个新字符而更新?查询到位,事件到位,唯一缺少的是键入值存储在哪里,因为在 "typing" 事件期间它不在控件的 .Value 属性 中。
注意,我在下面(以及之前的编辑中)阅读状态的许多尝试都是垃圾。我有这个在不同时间执行的查询构建函数(未在问题中列出,mia culpa)。我现在将状态作为参数传递给所述查询函数,而不是尝试主动读取它。我将此作为对任何走上类似道路的人的警告。如果到目前为止我误导了任何人,我深表歉意。
textBox 的 'Value' 属性 不会像人们预期的那样在更改或键入事件时更新。如果您希望在输入文本框时捕获输入的内容,您需要查找 'Text' 属性,如:
Me.txtSearchBox.Text
不幸的是,除非文本框处于活动状态,否则无法访问此 属性,因此如果您在阅读 .Text 的同时与其他控件交互,您将需要测试文本框是否处于活动状态,这它不会,并且会失败并转而检查 'Value',如:
' 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 & vbNullString)
Else
' textBox failover:
' Value is always accessible
strSearchBox = Trim(txtSearchBox.Value & vbNullString)
End If
' strSearchBox now has the contents of txtSearchBox, one way or the other
是的,我是一个有强迫症的 Trim()er。是的,我通过附加“”转换为字符串(根据@ComputerVersteher 更正为 vbNullString——非常感谢)。如果那太可怕了,请对我大喊大叫。关键是,.Value 在表单加载时可以为 null,并且将 null 值分配给字符串变量是破坏性的。
不幸的是,如果您要 运行 此代码在进入和退出调试或加载表单时 Screen.ActiveControl.Name 将无法调用。您可以通过测试相关表单是否已实际加载来解决此问题,如下所示:
If not CurrentProject.AllForms(Me.Name).IsLoaded Then
' activeform failover:
' Value is always accessible
strSearchBox = Trim(txtSearchBox.Value & vbNullString)
Else
' there's an Form 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 & vbNullString)
Else
' textBox failover:
' Value is always accessible
strSearchBox = Trim(txtSearchBox.Value & vbNullString)
End If
End If
我希望这能为一些人节省一点时间。 如果您阅读它并且不听从我的建议,也许它会节省您的时间。查看编辑以查看有关读取 VB 表单状态的其他错误想法以及有关控件名称唯一的错误假设等...
实现这一点的关键是使用文本框的 OnChange
事件,每次击键都会触发该事件,从而更改文本框的内容。
因此,您可以通过在 OnChange
事件的事件处理程序中引用文本框的 Text
属性 轻松更改列表框的内容。
这是搜索动物名称列表的非常基本的演示: