MS Access 在 vba 中的 KeyDown 事件中获取发件人文本框
MS Access get sender textbox on KeyDown event in vba
我在 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
这段代码工作得很好,但我还有 5 个相同的字段需要在它们之间切换。
获取事件发送者的任何方法,我的意思是按键内的文本框对象,我想为所有文本框创建通用函数,我不想复制粘贴此代码。
将您的程序重命名为这个,保留所有其余代码:
Private Sub On_KeyDown(KeyCode As Integer, Shift As Integer)
然后在你的所有 controls/textboxes 中,将参数传递给此过程:例如,你上面的事件将简单地传递键码,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
其中 Sender
是当前文本框和 NextObject
我接下来需要关注的对象。
它还会测试是否在文本框中输入了最大数量的符号,例如它是否没有达到允许的最大数量,例如 31 天。
现在,如果我需要处理事件,我会这样做:
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
我在 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
这段代码工作得很好,但我还有 5 个相同的字段需要在它们之间切换。
获取事件发送者的任何方法,我的意思是按键内的文本框对象,我想为所有文本框创建通用函数,我不想复制粘贴此代码。
将您的程序重命名为这个,保留所有其余代码:
Private Sub On_KeyDown(KeyCode As Integer, Shift As Integer)
然后在你的所有 controls/textboxes 中,将参数传递给此过程:例如,你上面的事件将简单地传递键码,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
其中 Sender
是当前文本框和 NextObject
我接下来需要关注的对象。
它还会测试是否在文本框中输入了最大数量的符号,例如它是否没有达到允许的最大数量,例如 31 天。
现在,如果我需要处理事件,我会这样做:
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