Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vba中按下键事件时MS Access获取发送方文本框_Vba_Forms_Ms Access_Ms Access 2007 - Fatal编程技术网

vba中按下键事件时MS Access获取发送方文本框

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.

在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.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