有一个用于搜索文本的文本框。用户通过单击搜索按钮或按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
首先将焦点简单地设置到搜索按钮。
此外,我还将检查是否按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