我有一个包含10个以上文本控件的Access数据库。我想要一些代码来处理CTRL + A KeyPress事件。通常,在Access中按CTRL + A时,会选择所有记录。我的最终目标是让CTRL + A只选择控件的文本(比如在浏览器的URL栏中按CTRL + A,它只选择那个文本),这样我就只能删除该控件的文本。我检查this article,因为我想要一些可以处理任何文本框的东西(处理每个文本框的KeyPress = 60+行代码)。有没有办法,比如说,下一个循环?
Function HandleKeyPress(frm As Form, KeyAscii As Integer, ByVal e As KeyPressEventArgs) 'should it be a function or a sub?
For Each ctl In Me.Controls
If KeyAscii = 1 Then 'I think this is CTRL + A?
e.Handled = True 'Stop this keypress from doing anything in access
focused_text_box.SelStart = 0
focused_text_box.SelLength = Len(focused_text_box.Text)
End If
Next
End Function
除此之外,如何将文本框的名称传递给此子/函数?
注意:如果您还没有注意到,我仍然是VBA / Access的菜鸟。
答案 0 :(得分:4)
您当前的方法不起作用,因为它包含多个在VBA中不起作用的事情(如June7所述),并且因为表单keydown事件优先于文本框keydown事件
您可以使用以下代码(受this answer on SU启发):
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyA And Shift = acCtrlMask Then 'Catch Ctrl+A
KeyCode = 0 'Suppress normal effect
On Error GoTo ExitSub 'ActiveControl causes a runtime error if none is active
If TypeOf Me.ActiveControl Is TextBox Then
With Me.ActiveControl
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
End If
ExitSub:
End Sub
使用VBA或仅使用属性窗格将Form.KeyPreview
属性设置为True非常重要,以允许此函数优先于默认行为。