如何识别哪个文本框是实时活动的?

时间:2018-01-25 05:44:48

标签: ms-access

我有一个关于如何实时获取主动控件名称的问题。以下是详细信息。

我创建了一个表单,允许用户输入记录(请参见随附的截图)。通过这种形式,用户可以在2000年增加安徽省的天然气供需数据。 enter image description here

我想做的一个功能是输入某些记录,例如2000年安徽天然气“总供应量”表格可以显示所有安徽天然气“总供应量”近2000年,比如1997-1999,在柱形图中给予用户参考。当用户编辑“导入”时,图表将相应地切换为“导入”。

我知道OnClick()能够帮助我获取活动文本框的名称,但是框太多了。我想还有其他一些简单的方法。如果我选择不使用OnClick(),我也觉得我可能需要另一个线程来捕获活动控件的名称,但VBA中似乎不支持多个线程?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在表单模块中创建一个函数:

Private Function FieldClicked()
    Dim ctl As Control

    Set ctl = Me.ActiveControl
    Select Case ctl.Name
    Case "Field1"
        ....
    Case Else
        ....
    End Select
End Function

在设计模式下,选择要分析的所有文本框以及On Click属性类型=FieldClicked()。在这种情况下,您不需要为每个字段创建OnClick事件处理程序 - 只需一个函数,您可以在其中分析您想要的任何内容。

顺便说一句,为了您的目的,最好使用On Enter事件,而不是On Click - 用户可以使用键盘输入字段,而不是鼠标。

答案 1 :(得分:0)

如果您的目标是避免为每个文本框声明一个OnEnter事件,那么您可以在加载表单时动态添加事件:

Private Sub Form_Load()
    Dim ctl As Control
    For Each ctl In Me.Controls
        If TypeOf ctl Is Textbox Then
            Dim txtbox As Textbox
            Set txtbox = ctl
            txtbox.OnEnter = "=FieldEntered(""" & txtbox.Name & """)"
        End If
    Next ctl
End Sub

Public Function FieldEntered(textboxName As String)
    Debug.Print textboxName
End Function

然后,您可以使用传递给textboxName函数的FieldEntered参数对图表执行任何操作。

你也可以在Me.ActiveControl.Name函数中使用FieldEntered,而不是通过参数传递它,但这主要是美学。

注意:为此,FieldEntered函数必须是公共函数。

另一种方法是使用Form的Timer事件,但这会影响性能,所以我认为上面的内容更强大。