vba中按下键事件时MS Access获取发送方文本框
在MS Access 2007中,我的表单上有KeyDonw事件处理程序,我使用它来代替掩码,因为它们的工作方式与我需要的不同 这是我的代码:vba中按下键事件时MS Access获取发送方文本框,vba,forms,ms-access,ms-access-2007,Vba,Forms,Ms Access,Ms Access 2007,在MS Access 2007中,我的表单上有KeyDonw事件处理程序,我使用它来代替掩码,因为它们的工作方式与我需要的不同 这是我的代码: Private Sub date_rogd_s_d_KeyDown(KeyCode As Integer, Shift As Integer) If ([Forms]![aForm].Form.date_rogd_s_d.SelLength = 2) Then [Forms]![aForm].Form.date_rogd_s_d.
Private Sub date_rogd_s_d_KeyDown(KeyCode As Integer, Shift As Integer)
If ([Forms]![aForm].Form.date_rogd_s_d.SelLength = 2) Then
[Forms]![aForm].Form.date_rogd_s_d.Text = ""
End If
If (val([Forms]![aForm].Form.date_rogd_s_d.Text) > 31) Then
Select Case KeyCode
Case vbKeyDelete, vbKeyBack, vbKeyReturn
X = Y
Exit Sub
Case Else
KeyCode = 0
Exit Sub
End Select
End If
If (Len([Forms]![aForm].Form.date_rogd_s_d.Text) < 2) Then
Select Case KeyCode
Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57
Case 96, 97, 98, 99, 100, 101, 102, 103, 104, 105
Case vbKeyDelete, vbKeyBack, vbKeyReturn
X = Y
Case Else
KeyCode = 0
End Select
Else
Select Case KeyCode
Case vbKeyDelete, vbKeyBack, vbKeyReturn
X = Y
Exit Sub
End Select
[Forms]![aForm].Form.date_rogd_s_m.SetFocus
End If
End Sub
Private Sub date\u rogd\u s\u d\u KeyDown(KeyCode为整数,Shift为整数)
如果([Forms]![aForm].Form.date\u rogd\u s\u d.SelLength=2),则
[表格]![aForm].Form.date\u rogd\u s\u d.Text=“”
如果结束
如果(val([Forms]![aForm].Form.date\u rogd\u s\d.Text)>31),则
选择大小写键代码
案例vbKeyDelete、vbKeyBack、vbKeyReturn
X=Y
出口接头
其他情况
KeyCode=0
出口接头
结束选择
如果结束
如果(Len([Forms]![aForm].Form.date\u rogd\u s\d.Text)<2),则
选择大小写键代码
案例48、49、50、51、52、53、54、55、56、57
个案96、97、98、99、100、101、102、103、104、105
案例vbKeyDelete、vbKeyBack、vbKeyReturn
X=Y
其他情况
KeyCode=0
结束选择
其他的
选择大小写键代码
案例vbKeyDelete、vbKeyBack、vbKeyReturn
X=Y
出口接头
结束选择
[表格]![aForm].Form.date\u rogd\u s\u m.SetFocus
如果结束
端接头
这段代码工作得很好,但我还有5个相同的字段需要切换
任何获取事件发送者的方法,我的意思是按下textbox对象内键,我想为所有textbox创建通用函数,我不会复制粘贴此代码。将您的过程重命名为此,保留所有其余代码:
Private Sub On_KeyDown(KeyCode As Integer, Shift As Integer)
然后,在所有控件/文本框中,将参数传递给此过程:例如,上面的事件只需传递键代码,shift作为对同一子对象的引用:
Private Sub date_rogd_s_d_KeyDown(KeyCode As Integer, Shift As Integer)
Call On_KeyDown(KeyCode, Shift)
End Sub
我使用此函数解决此问题:
Private Sub onKeyDownForDateFields(KeyCode As Integer, Shift As Integer, Sender As Object, NextObject As Object, count As Integer, maxValue As Integer, Is_submit As Boolean)
If (Sender.SelLength = count) Then
Sender.Text = ""
End If
If (val(Sender.Text) > maxValue) Then
Select Case KeyCode
Case vbKeyDelete, vbKeyBack
X = Y
Exit Sub
Case Else
KeyCode = 0
Exit Sub
End Select
End If
If (Len(Sender.Text) < count) Then
Select Case KeyCode
Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57
Case 96, 97, 98, 99, 100, 101, 102, 103, 104, 105
Case vbKeyDelete, vbKeyBack, vbKeyReturn
X = Y
Case Else
KeyCode = 0
End Select
Else
Select Case KeyCode
Case vbKeyDelete, vbKeyBack
X = Y
Exit Sub
Case vbKeyReturn
Êíîïêà48_Click
Exit Sub
End Select
If (Is_submit = True) Then
Êíîïêà48_Click
Else
NextObject.SetFocus
End If
End If
End Sub
Private Sub date_rogd_s_d_KeyDown(KeyCode As Integer, Shift As Integer)
onKeyDownForDateFields KeyCode, Shift, [Forms]![aForm].Form.date_rogd_s_d, [Forms]![aForm].Form.date_rogd_s_M, 2, 31, False
End Sub