首页 > 解决方案 > Access表单上的文本框传递先前的值

问题描述

我创建了一个搜索表单。
搜索表格

搜索文本有一个文本框。用户通过单击搜索按钮或按下回车键来触发搜索事件。

按钮单击事件正在工作。

第一次按下回车键时,文本框将传递上一个事件在文本框中输入的值。如果我第二次按回车键,则当前值通过。

例如,在表单加载时,文本框为空,然后我将搜索文本输入为“Ali”并按回车键,然后传递值“NULL”,再次按下回车键,然后传递值“Ali”。

Option Compare Database

Option Explicit

Private Sub btnSearch_Click()
    Dim SQL, strSearch As String
    strSearch = Nz(Me.txtSearch.Value, "")
    SQL = "SELECT tbl_mst_Employee_Details.emp_ID, " _
        & "tbl_mst_Employee_Details.emp_Name " _
        & "FROM tbl_mst_Employee_Details " _
        & "where [emp_Name] like '*" & strSearch & "*' " _
        & "ORDER BY tbl_mst_Employee_Details.emp_Name;"
    Me.lstEmployee.RowSource = SQL
    Me.lstEmployee.Requery
    Me.txtEmpID.Value = ""
    Me.txtEmpName.Value = ""
    Me.Refresh
End Sub

Private Sub Form_Load()
    Me.txtEmpID.Value = ""
    Me.txtEmpName.Value = ""
    Me.txtSearch.Value = ""
End Sub

Private Sub lstEmployee_Click()
    With lstEmployee
        Me.txtEmpID.Value = .Column(0)
        Me.txtEmpName.Value = .Column(1)
    End With
End Sub

Private Sub lstEmployee_DblClick(Cancel As Integer)
    Forms!frmEmployeeShiftDetails.txtEmpID.Value = Me.txtEmpID
    Forms!frmEmployeeShiftDetails.txtEmpName.Value = Me.txtEmpName
    DoCmd.Close
    Forms!frmEmployeeShiftDetails.txtEmpID.SetFocus
End Sub

Private Sub lstEmployee_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        lstEmployee_DblClick (0)
    End If
End Sub

Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        btnSearch_Click
    End If
End Sub

标签: vbams-access

解决方案


只需先将焦点设置在搜索按钮上。

此外,我还会检查是否按下制表符(并为两者使用常量,返回和制表符)。

为了具有恒定的 UI 行为,我会注意在搜索框中按 Tab 时搜索按钮接收焦点,因此在表单中设置正确的 Tab 顺序。

Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
        btnSearch.SetFocus
        btnSearch_Click
    End If
End Sub

推荐阅读