Access表单上的文本框传递先前的值

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

我创建了一个搜索表单。Search form

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

按钮单击事件正在运行。

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

例如,在表单加载中,文本框为空,然后输入搜索文本为“ Ali”,然后按Enter键,然后传递值“ NULL”,然后再次按Enter键,然后传递值“ 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
ms-access access-vba
1个回答
0
投票

首先将焦点简单地设置到搜索按钮。

此外,我还将检查是否按Tab键(并对返回和Tab键都使用常量。)>

为了保持稳定的UI行为,我会在按下搜索框中的选项卡时注意搜索按钮会获得焦点,因此请在表单中设置正确的选项卡顺序。

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
© www.soinside.com 2019 - 2024. All rights reserved.